Centos
為遠端備份腳本設置日誌記錄
所以我寫了一個簡短的腳本,我計劃每天通過一個 cron 作業執行它來打包我的站點文件並將它們發送到遠端位置。我還計劃合併數據庫轉儲,但我還沒有做到這一點。
然而,我今天的問題是,我不確定如何記錄每個命令的輸出,以了解該命令可能輸出的錯誤、警告或其他相關資訊。我還想安裝某種故障保險裝置,因此如果出現嚴重錯誤,腳本將停止執行並通過電子郵件或其他方式通知我。好的,電子郵件不是那麼重要,但會很好。
有人對此有任何想法嗎?這是我到目前為止所擁有的。
順便說一句,兩台伺服器都是執行標準 LAMP 的 CentOS 6.2。
#!/bin/sh ################################# ### Set Vars ################################# THEDATE=`date +%m%d%y%H%M` ################################# ### Create Archives ################################# tar -cf /root/backups/files/server_BAK_${THEDATE}.tar -C / var/www/vhosts gzip /root/backups/files/server_BAK_${THEDATE}.tar ################################# ### Send Data to Remote Server ################################# scp /root/backups/files/server_BAK_${THEDATE}.tar.gz user@host:/home/bak1/ftp/backups/ ################################# ### Remove Data from this Server ################################# rm -rf /root/backups/files/server_BAK_${THEDATE}.tar.gz
有點雜亂無章的答案,但請通讀一遍。
當出現任何類型的錯誤時,讓您的腳本停止執行:
set -e
這將確保如果您的任何命令失敗,腳本將在那裡失敗。其他好主意:
function error_handler() { # This will get run when an error is detected } trap error_handler ERR
這將在
error_handler
命令失敗時執行。您還可以讓EXIT
處理程序在每次腳本退出時執行程式碼。要將腳本的所有輸出擷取到文件中:
exec &> some_log_file
還能夠在日誌文件中查看腳本執行的命令(非常適合故障排除):
set -x
要使您的腳本拋出有關未定義變數的警告:
set -u
總結一下,開始你的腳本:
trap error_handler ERR exec &> some_log_file set -eux
如果您從 cron 執行腳本,如果您的腳本有任何輸出,它將向您發送一封電子郵件。要僅在出現問題時收到電子郵件,
cat some_log_file
請在錯誤處理程序中放入 a 並設置好。更新:回答您的其他問題。
- 為了防止錯誤破壞整個腳本,您可以在
if
語句中執行命令。像if ! <some command>; then <what do you do if it fails, or possibly nothing>; fi
- 如果你有
trap error_handler
你還需要定義一個function error_handler
.- 洗牌並不是一個壞主意,但是
set -eu
…set -eux
- …如果您擔心安全性,則不應將 mysql 密碼放在命令行上(任何執行的人
pgrep -lf mysql
都會看到它)。請改用選項文件。然後您無需擔心日誌文件中的密碼。option_file=`mktemp` cat > $option_file <<EOF [client] password = $DB_PASSWD user = $DB_USER EOF
然後
mysqldump
執行--default-extra-path=$option_file
.$option_file
當您不再需要它時,不要忘記刪除它。
- 使用
rsync
而不是scp
. 它對於複製相對較大的文件效果更好。