Linux

在腳本中創建日誌文件在手動執行時有效,但在通過 cron 執行時無效

  • January 30, 2015

我使用 Percona 的 Xtrabackup 工具每晚備份數據庫。我編寫了一個包裝腳本來保留適當數量的備份,將輸出寫入日誌文件,並在備份終止時通過電子郵件發送日誌文件。當我以 root 身份手動執行腳本時,會按預期生成日誌文件。但是,一旦我將其放入 cron 中,就會創建日誌文件,但不會生成任何內容。這是腳本的相關部分(如果我應該發布整個內容,請告訴我。

DATE=`date +%F-%H%M`
LOC=/var/mysqlbackups/dbBackup-$DATE
LOGLOC="$LOC.log"
/usr/bin/innobackupex --user=$SQLUSER --password=$SQLPASSWORD --no-timestamp $LOC &>>$LOGLOC
if [ $? -ne 0 ]
then
 CONTENT="Backup Failed. Log information below.\n\n--------------------------------------------------------\n$CONTENT"
 CONTENT+=`cat $LOGLOC`
 echo -e "$CONTENT" | mail -s "Backup on DB3 failed" me@my.address
 exit 1
fi

這是 root 的 crontab 中的 crontab 條目:

5 1 * * * /usr/local/sbin/dbBackup.sh

以及生成的目錄/文件。並不是說我在 1/28 手動執行它,然後在 1/29 它由 cron 執行:

drwxr-xr-x 5 root root  4096 Jan 28 10:18 dbBackup-2015-01-28-1010
-rw-r--r-- 1 root root 21441 Jan 28 10:18 dbBackup-2015-01-28-1010.log
drwxr-xr-x 5 root root  4096 Jan 29 01:14 dbBackup-2015-01-29-0105
-rw-r--r-- 1 root root     0 Jan 29 01:05 dbBackup-2015-01-29-0105.log

我已經問過Google,但沒有找到問題所在。任何幫助,將不勝感激。

我在這裡看到兩種可能性。一,我強烈建議對 cron 作業中的所有命令使用完整路徑 - 例如/usr/bin/cat,而不是cat. +=第二,在字元串語法不起作用的 cron 環境中,您的 shell 可能更具限制性。嘗試以某種方式解決這個問題 - 我不確定我的頭頂如何,但是cat我會從另一個文件開始。

事實證明,當腳本在 cron 中執行時,使用只有 bash 支持的 IO 重定向會破壞腳本。我改用老派的 2>&1 語法,問題就解決了。

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