2017-02-23 66 views
1

我正在構建一個在Ubuntu上運行的備份腳本。Crontab以不同的方式運行bash

backup-all.sh文件:

echo "bootstrap" 
/home2/backup/bootstrap/backup.sh 
BOOTSTRAP_STATUS=$([ "$?" == 0 ] && echo "OK" || echo "** FAIL **") 

echo "sv2" 
/home2/backup/sv2/backup.sh 
SV2_STATUS=$([ "$?" == 0 ] && echo "OK" || echo "** FAIL **") 

if [ "$BOOTSTRAP_STATUS" == "OK" ] && [ "$SV2_STATUS" == "OK" ] ; then 
TITULO="Backup OK" 
else 
TITULO="Backup !FAILED!" 
fi 

(
     echo "Backup status" 
     echo "-------------" 
     echo "BOOTSTRAP_STATUS = $BOOTSTRAP_STATUS" 
     echo "SV2_STATUS = $SV2_STATUS" 
     echo "-------------" 
) | mail -s "${TITULO}" "[email protected]" 

的backup.sh文件結尾爲:

exit 0 # for success; OR: 
exit 1 # for errors + send mail with log file 

* backup.sh文件中包含的rsync和MySQL備份。

當腳本返回1(錯誤)時,它也會向我發送一封電子郵件,告訴我這是錯誤的,並且所有步驟都記錄在日誌文件中。

**我有電子郵件。一個用於概述,另一個用於每個獲得錯誤的「服務器」。

所以,如果我手動運行,

./backup-all.sh 

一切都是好的。我只收到一封標題爲「備份確定」的郵件。

如果我等待cron運行這個工作,我只收到一封標題爲「Backup!FAILED!」的郵件,儘管我沒有收到錯誤信息並且日誌文件沒有問題。

crontab -e 
0 0 * * * /home2/backup/backup-all.sh 

那麼,我的腳本的條件/退出值有什麼cron工作?

+2

如果你沒有明確地請求bash(用'#!/ bin/bash'),很可能是'[「$?」 == 0]'是一個語法錯誤。 –

+2

真的不是語法錯誤,只是傳遞給'['的無效參數。 –

回答

2

調試,日誌標準輸出和錯誤日誌文件:

  1. rsyncmysqldump不是在cron:

    0 0 * * * /home2/backup/backup-all.sh > /tmp/debug.log 2>&1 
    

    幾個可能性,cron不以默認值或設計有適當的ENV env中

  2. 添加#!/usr/bin/bash到您的bash腳本
+0

選項2已解決。唯一的是我必須改變爲「#!/ bin/bash」。謝謝 – lcssanches