Bash

備份電子郵件日誌腳本向我發送垃圾郵件:瘋狂的 BASH 擴展

  • October 1, 2010

我有一個 BASH 腳本“讀取”備份日誌,報告上次備份的成功/失敗,列出備份目錄的內容,然後通過電子郵件發送結果。在將備份移動到新伺服器並將電子郵件常式轉換為函式後,它會向我發送垃圾郵件。看起來它正在擴展日期並為​​每個擴展日期發送一封電子郵件。我看不到我的生活如何。以下是“MAIN”中的一些程式碼:

YDATE=$(date -s "yesterday" '+%a%b%d')
BKPLOG="/mnt/nfs/horizon/backuplog_$YDATE.log"

STATUS=$(cat /mnt/nfs/horizon/backuplog_$YDATE.log)

# Catenate logs and status into message body -- email report to 
# Support.
func_make_msg $MSG "$RPT" "$STATUS" "$DB_SERV_BACKUP_LISTING"
func_send $MSG "fake@admin.org" # Send it!

func_make_message 只是創建消息。請注意,這兩個函式都不在 for 或 while 循環中。下面是發送函式:

function func_send ()
{
   local _message=$1
   local _cc=$2
   local _recipient=$3
   $PRINT --columns=2 -t < $_message | $MAIL -s "Backup Logs" "$_cc"
}

每次執行時,我的收件箱都會顯示備份日誌中每個日期的電子郵件。謝天謝地,我把舊的都塗上了焦油,否則我的收件箱還是會發瘋的。

備份伺服器是 Debian。腳本在 cron 作業上執行:

0 7 * * *      bash /home/bkpadmin/scripts/backup_mail.sh

有任何想法嗎?時間差了一英里,但我通過手動執行消除了 ntp、cron 因素。即使在修復時間/日期並手動執行之後,我也得到了相同的結果。

這是好奇的 func_make_msg 函式:

function func_make_msg ()
{
   local _msg_body=$1
   local _file=$2
   local _backup_status=$3
   local _db_backups=$4
   cat > $_msg_body << EOM 
## Nightly backup logs ###########################
** Backup Status **
File name: $_file
$_backup_status
---------------

** Important DB Server ****
$_db_backups
---------------
EOM
}

謝謝~

布布諾夫

更新感謝丹尼斯。就是這樣。我犯了一個愚蠢的錯誤。由此產生的循環式結果很有趣。我是傻瓜的兩倍,因為我實際上閱讀了手冊頁來提醒自己如何計算“昨天”。將“s”替換為“d”。我猜是“字元串”中的“S”。…更多愚蠢…繼續閱讀…

這在測試期間沒有發生,因為該腳本屬於並在……普通使用者帳戶中執行。date -s 命令失敗但昨天仍然輸出…只是沒有設置系統日期…缺少權限等等。指向我的第二個……更愚蠢的錯誤…… cron 條目是針對 root 的。另一個例子,說明為什麼永遠不應該以 root 身份執行腳本,或者甚至以 root 身份登錄,除非沒有其他方法。

由於具有root權限,該腳本能夠更改系統日期日期並隨著變數的反复擴展而大量出錯。在我們說話的時候,我正在向有關當局自首。對不起世界。

當我們討論這個主題時,任何人都可以看到任何其他愚蠢的錯誤嗎?

我的第一個建議是你引用$MSG這些行:

func_make_msg "$MSG" "$RPT" "$STATUS" "$DB_SERV_BACKUP_LISTING"
func_send "$MSG" "fake@admin.org" # Send it!

$_message在這一行

$PRINT --columns=2 -t < "$_message" | $MAIL -s "Backup Logs" "$_cc"

但我認為這些是文件名,它們不是您問題的根源。

cat您可以在此行中消除:

STATUS=$(< /mnt/nfs/horizon/backuplog_$YDATE.log)

但是,同樣,這不是你真正的問題。

編輯:

我想我發現了你的問題:date -s 設置日期和時間。嘗試刪除-s.

引用自:https://serverfault.com/questions/186682