[英]bash sh script for remote backups
我在服務器上遇到問題,在這種情況下,從服務器到遠程主機的自動備份失敗。
目前,這使我沒有最近的備份,也沒有一堆.tar.gz
文件占用服務器上的大量空間。
目前,我要糾正此問題的當前過程是手動輸入膩子,並通過命令行在各個文件中分別通過FTP傳輸這些文件。 這既費時又乏味。
我想編寫一個.sh腳本,我可以將其上傳到該文件夾,並告訴服務器將文件夾中的每個.tar.gz文件放入其中。 我無法傳輸整個文件夾,而只能傳輸其中的每個文件,因為某些文件已經正確傳輸,等等。
我發現了這個問題 , 該問題顯示了一個適用於該問題發問者的腳本,但我需要調整此腳本的一部分,我不知道(不夠自信)使用.sh指令來執行此操作,並且也對搞砸任何內容持謹慎態度服務器端。
#!/bin/sh
USERNAME="user"
PASSWORD="pass"
SERVER="123.456.78.90"
DATE="`date +%Y-%m-%d`"
BACKUPDIR="/${DATE}/accounts/"
find . -type f -name "*.tar.gz" -exec basename {} .tar.gz \; |
while read filename ; do
/bin/ftp -inv $SERVER >> /tmp/ftp_backup.log <<EOF
user $USERNAME $PASSWORD
cd $BACKUPDIR
binary
put $filename
EOF
echo "$date copied $filename" >> /tmp/ftp_backup.log
done
我的目的是讓這個腳本,我可以把它上傳到服務器文件夾中的問題,然后運行該腳本(后chmod
文件夾中移動的荷蘭國際集團吧) .tar.gz
文件-一個在一個時間- FTP'd轉到備份目錄( /<date>/accounts/
),並在它們全部移動后完成。
(然后,我將刪除服務器端的.tar.gz
文件和上面的.sh
腳本。)
共有約60個文件,最大大小為15Gb。 文件名不包含空格。
文件路徑結構:
服務端:
/backupsfolder/2018-07-11/filename1.tar.gz
/backupsfolder/2018-07-11/filename2.tar.gz
/backupsfolder/2018-07-11/backupscript.sh //我上面的腳本
/backupsfolder/2018-07-11/master.meta //其他文件
FTP端:
/2018-07-11/accounts/filename1.tar.gz
經過一些工作后,我發現了一些需要注意和解決的問題:
1)為了運行, .sh
文件需要在服務器上使用chmod
來“啟用”。
chmod +x ./<filename>
2) Unix行尾; 使用Notepad ++時,它聲稱已保存了正確的行尾,但是該錯誤出現在以下服務器上:
/ bin / sh ^ M:解釋錯誤:沒有這樣的文件或目錄
這可以通過以下方式解決:
sed -i 's/\\r//' <filepath>/<filename>
從這個答案 。
3)推送到FTP的文件名是錯誤的-不包括.tar.gz-我還沒有意識到-exec
功能會切斷.tar.gz
這是固定的
-exec basename {} .tar.gz
變成
-exec basename {}
4)日志文件輸出未在新行上設置; 而是全部都在同一條線上。 通過閱讀此anwser並在echo語句上使用-e
並使用\\n
語法,可以解決此問題。
echo -e "$date copied $filename\n"
最終完全可用的bash腳本可以滿足我的需求:
sed -i 's/\\r//' /<filepath>/<filename>
chmod +x ./<filename>
該腳本從當前目錄中獲取.tar.gz文件,並將它們保存到遠程FTP,依次循環瀏覽每個文件。
#!/bin/sh
USERNAME="user"
PASSWORD="pass"
SERVER="123.456.78.90"
DATE="`date +%Y-%m-%d`"
BACKUPDIR="/${DATE}/accounts/"
find . -type f -name "*.tar.gz" -exec basename {} \; |
while read filename ; do
ftp -inv $SERVER >> /tmp/My_ftp_backup.log <<EOF
user $USERNAME $PASSWORD
cd $BACKUPDIR
binary
put $filename
EOF
echo -e "$date copied $filename\n" >> /tmp/My_ftp_backup.log
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.