Linux
在腳本中創建日誌文件在手動執行時有效,但在通過 cron 執行時無效
我使用 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 語法,問題就解決了。