$ git checkout -b debug
Switched to a new branch 'debug'
$ git checkout master
Switched to branch 'master'
$ git merge debug
將 debug 分支合併回 master
$ git branch -d debug
Deleted branch debug.
$ git commit -m "commit message"
改變指標
$ git reset
會移動分支
$ git log
秀出分支的頭到尾
2016年12月15日 星期四
2015年5月29日 星期五
【CentOS】rsync 異地備援
Master A, Client B, Client C, Client D
Master A 為有版控的開發環境
希望 commit 到 Master A 後
能夠自動同步到三台 Client 機器上
rsync 第一次做完 Full Backup 後
日後備份檔案會是採取差異備份的策略
大幅降低備份檔案的傳輸時間
rsync 有兩種方法在 server / client 進行傳輸
1. 透過 ssh 的通道
2. 使用 rsync 提供的 daemon 服務
採用方法一透過 ssh 的通道來同步檔案
由於希望往後能靠自動排程(crontab)來進行同步
所以需要先製作出免密碼登入的 ssh 金鑰
- 在 Master 端建立 Public Key 與 Private Key
- Private Key 保存於 Master A
- Public Key 傳送給 Client B,C,D
#用 RSA 演算法產生 Key Pair ssh-keygen -t rsa #查看 keys ll ~/.ssh #Private Key 預設位置不用變更 #Public Key to Client B scp id_rsa.pub root@clientB:~/.ssh #Public Key to Client C scp id_rsa.pub root@clientC:~/.ssh #Public Key to Client D scp ip_rsa.pub root@clientD:~/.ssh
將 Public Key 保存至 authorized_keys
完成後,ssh 登入 Client 就免密碼
cd ~/.ssh cat id_rsa.pub >> authorized_keys chmod 644 authorized_keys
#!/bin/bash
# Master A 檔案路徑
localdir="/local/path"
# Client 端備份路徑
backupdir="/backups"
# Client 端 ip 位址
remoteip="192.168.100.252 192.168.100.253 192.168.100.254"
for ip in ${remoteip}
do
rsync -av ${localdir} -e ssh root@${ip}:${backupdir}
done
# 建立 crontab 工作,每十五分鐘差異備份一次 crontab -e 0-59/15 * * * * sh backup.sh
2015年2月5日 星期四
【Ubuntu】crontab 刪除過期備份檔案
若沒有自動清除老舊的備份檔案
就會累積不少備份檔案
因此修改一下之前寫的 backup.sh 檔案
假設備份檔案保留三個月
#設定刪除日期 deldate=$(date -d'3 months ago' +%Y%m%d) #刪除三個月前備份檔案 rm -f postgres."$deldate".tar.gz
若是要刪除五天前的檔案
可修改為 '5 days ago'
若有需要修改自動排程
cd /etc vi crontab
可以善用 find 指令
find /path/to -mtime +5 -exec rm {} \;
-mtime 表示最後修改時間
+5 表示五天以前
-exec 接要執行的指令
{} 表示 find 指令找到的檔案
2015年1月13日 星期二
【Javascript】匯出 csv
利用 encodeURIComponent
將字串轉為 Data URI
但要注意轉出的 code 為 UTF-8 編碼
若直接用 Microsoft Office Excel 開啟 csv 檔案時
中文會變成亂碼
因為 Excel 無法預設讀取 UTF-8 編碼的 CSV 檔案
所以利用增加 UTF-8 BOM 的方式
讓 Excel 直接開啟 csv 不會出現亂碼
navigator.appVersion.indexOf("Win") 若回傳值不為 -1
表示 OS 為 Windows 系列
指定 charset 為 帶 BOM 的 UTF-8
傳入的參數 _csvString
除了每列資料要加斷行符號
不同欄位之間的資料要加逗號之外
還要額外處理兩個地方
1.資料若含有特殊符號,例如逗號,資料需加上雙引號
2.資料內容若已有雙引號,建議用 replace 取代為兩個雙引號
這樣用 Excel 開啟時,瀏覽效果較佳
function exportToCSV( _csvString ) {
var downloadLink = document.createElement("a");
downloadLink.download = "dataTable.csv";
downloadLink.innerHTML = "Download File";
if (window.webkitURL != null) {
var code = encodeURIComponent( _csvString );
if ( navigator.appVersion.indexOf("Win")==-1 ) {
downloadLink.href = "data:application/csv;charset=utf-8," + code;
} else {
downloadLink.href = "data:application/csv;charset=utf-8,%EF%BB%BF" + code;
}
}
downloadLink.click();
}
2015年1月8日 星期四
【Javascript】匯出txt
所以就想說將網頁上的純文字內容輸出為一個 txt 檔案
saveTextAsFile function 內有兩個參數
第一個參數 _fileName 為預設在本地端存檔的檔名
第二個參數 _text 為輸出的純文字內容
function saveTextAsFile( _fileName, _text ) {
var textFileAsBlob = new Blob([_text], {type:'text/plain'});
var downloadLink = document.createElement("a");
downloadLink.download = _fileName;
downloadLink.innerHTML = "Download File";
if (window.webkitURL != null) {
// Chrome allows the link to be clicked
// without actually adding it to the DOM.
downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
} else {
// Firefox requires the link to be added to the DOM
// before it can be clicked.
downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
downloadLink.onclick = destroyClickedElement;
downloadLink.style.display = "none";
document.body.appendChild(downloadLink);
}
downloadLink.click();
}
function destroyClickedElement(event) {
document.body.removeChild(event.target);
}
2014年9月24日 星期三
【Ubuntu】postgreSQL 本地備份
以下文章所出現家目錄,為安裝 PostgreSQL 的帳號之家目錄
例如是使用 user 帳號安裝 PostgreSQL
在家目錄新增檔案 .pgpass
檔案內容只有一行
localhost:port:database:username:password
localhost: 輸入 ip;若為本機端,輸入 127.0.0.1
port: port of PostgreSQL
database: 資料庫名稱
username: 資料庫帳號
password: 資料庫密碼
在家目錄新增檔案 backupdb.sh ,檔案內容如下
例如是使用 user 帳號安裝 PostgreSQL
在家目錄新增檔案 .pgpass
檔案內容只有一行
localhost:port:database:username:password
localhost: 輸入 ip;若為本機端,輸入 127.0.0.1
port: port of PostgreSQL
database: 資料庫名稱
username: 資料庫帳號
password: 資料庫密碼
修改 .pgpass 的權限為 600
sudo chmod 600 .pgpass
sudo chmod 600 .pgpass
新增備份目錄,測試匯出資料庫是否不用輸入密碼,若不用則上述設定成功
mkdir dbbackup
pg_dump -h 127.0.0.1 -p 5432 -U postgres postgres>postgres.dump
mkdir dbbackup
pg_dump -h 127.0.0.1 -p 5432 -U postgres postgres>postgres.dump
在家目錄新增檔案 backupdb.sh ,檔案內容如下
#!/bin/bash #設定時間變數 day=$(date +%Y%m%d) #設定備份路徑 bkdir="/home/user/dbbackup" #備份資料庫 pg_dump -h 127.0.0.1 -p 5432 -U postgres postgres>"$bkdir"/postgres.dump #移動到備份目錄 cd "$bkdir" #壓縮資料庫並加上日期 tar -zcf postgres."$day".tar.gz postgres.dump #刪除備份檔 rm postgres.dump exit 0
加入 crontab 排程內,每天凌晨3:30做備份
30 3 * * * user sh /home/user/backupdb.sh
30 3 * * * user sh /home/user/backupdb.sh
若要將 tar 打包好的備份檔案解壓縮,指令如下
tar -zxv -f postgres.20140924.tar.gz
tar -zxv -f postgres.20140924.tar.gz
2014年8月28日 星期四
【Node.js】Send Email
需求為寄出帳號認證信件
開發環境為 ubuntu, nodejs, express, smtp server
以及需要安裝兩個 nodejs 模組
nodemailer 與 nodemailer-smtp-transport
使用 npm 安裝
開發環境為 ubuntu, nodejs, express, smtp server
以及需要安裝兩個 nodejs 模組
nodemailer 與 nodemailer-smtp-transport
使用 npm 安裝
- npm install nodemailer
- npm install nodemailer-smtp-transport
module.exports = {
sendEmail: function(_recipient, _subject, _html, _callback) {
var nodemailer = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport');
var config = require("../config/config");
var transporter = nodemailer.createTransport(smtpTransport({
host: config.smtp.host,
port: config.smtp.port,
auth: {
user: config.smtp.user,
pass: config.smtp.pwd
}
}));
transporter.sendMail({
from: 'sender@domain.org.tw',
to: _recipient,
subject: _subject,
html: _html
}, function(err, info) {
_callback(err, info);
});
}
}
使用 SMTP Server 的好處是
寄件人的位置可以自行定義
若不介意寄件人地址
也可以請 Gmail 幫忙寄信
更改 transporter 即可
寄件人的位置可以自行定義
若不介意寄件人地址
也可以請 Gmail 幫忙寄信
更改 transporter 即可
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'sender@gmail.com',
pass: 'password'
}
});
訂閱:
意見 (Atom)