目前服務器上每日會產生備份文件,需要使用winscp工具把備份同步到本地PC機硬盤上。平時都是圖形界面用鼠標點擊方式來同步的,效率低下,因此編寫了winscp自動同步腳本,並加入到計划任務中定時自動運行。
1.在linux服務器創建備份專用帳號:
chattr -i /etc/{passwd,shadow,group,gshadow} useradd bak_user echo '123456789' | passwd --stdin bak_user chattr +i /etc/{passwd,shadow,group,gshadow} su - bak_user exit
2.創建WINSCP同步腳本 c:\SERV_BAK.txt,該腳本用於同步數據到本地:option echo off
option batch continue option confirm off #無需確認直接操作 option transfer binary
option synchdelete on #服務端如果沒有該文件,則將本地文件刪除 open sftp://bak_user:123456789@服務器IP:33302 #分別填入服務器帳號、密碼、IP、ssh端口 cd /backup/bitmore.com #進入要同步的目錄內,會將該目錄下所有子目錄和文件進行同步 lcd c:\bitmore.com #進入本地目標目錄,該目錄要事先建立好,否則文件會傳到winscp的程序目錄下。 synchronize local #相當於rsync,將有差異的數據由服務器端同步到本地。local:同步到本地。remote:同步到對端
#get mysql-bin.* #可同步指定類型的文件,#用於注釋 close exit
注:如果路徑名稱帶有中文,最好用notepad++修改腳本的編碼為UTF-8格式,否則可能同步失敗。
3.在windows端CMD窗口執行【適合一次性執行】:
"D:\Program Files (x86)\WinSCP\WinSCP.exe" /console /script=c:\SERV_BAK.txt #以命令行方式同步數據
如果有多個服務器要同步,每個服務器最好單獨寫一個winscp腳本:
編寫 WINSCP-SERV-BAK.bat 批處理文件,將所有winscp腳本放在一起批量執行【推薦,適合大量服務器同步】:
start /min cmd /c "D:\Program Files (x86)\WinSCP\WinSCP.exe" /console /script=c:\SERV_BAK.txt start /min cmd /c "D:\Program Files (x86)\WinSCP\WinSCP.exe" /console /script=c:\SERV_BAK02.txt start /min cmd /c "D:\Program Files (x86)\WinSCP\WinSCP.exe" /console /script=c:\SERV_BAK03.txt
以上命令會同時打開3個CMD窗口來執行。start:開啟新窗口,/min:最小化運行主窗口,/c:原窗口關閉
4.添加windows計划任務,讓同步操作定時自動完成:
運行——》taskschd.msc
搞定。下班后PC機保持開機即可。從此解放了雙手。
輸入help: winscp> help call 執行任意遠程Shell命令 cd 改變遠程工作目錄 chmod 改變遠程文件權限 close 關閉會話 exit 關閉所有會話並結束程序 get 從遠程目錄下載文件到本地目錄 help 顯示幫助 keepuptodate 在一個遠程目錄連續反映本地目錄的改變 lcd 改變本地工作目錄 lls 列出本地目錄的內容 ln 新建遠程符號鏈接 lpwd 顯示本地工作目錄 ls 列出遠程目錄的內容 mkdir 新建遠程目錄 mv 移動或者重命名遠程文件 open 連接到服務器 option 設置或顯示腳本選項的值 put 從本地目錄上傳文件到遠程目錄 pwd 顯示遠程工作目錄 rm 刪除遠程文件 rmdir 刪除遠程目錄 session 列出連接的會話或者選擇活動會話 synchronize 用一個本地目錄同步遠程目錄