2014-06-12 90 views
0

我有一個小bash腳本來備份一些MySQL數據庫。該腳本使用mysqldump從MySQL中刪除數據庫,並將壓縮轉儲壓縮到LAN上的另一臺服務器。腳本似乎需要更多時間作爲cronjob運行

當我直接從命令行運行腳本,執行時間是大約2-3分鐘。

我添加了相同bash腳本給用戶根的crontab中。這個cronjob每天執行三次。我有一個印象,那就是腳本的執行時間要長得多(我猜可能長達一個小時)。

有什麼辦法,我可以調試這是怎麼回事幕後?我想知道爲什麼執行需要更多時間。

在crontab條目看起來如下:

* 0,8,16 * * * /opt/maintenance/backup-databases.sh 

回答

3

如果上面給出的crontab的語法是你真正使用的人,你的cronjob不執行,一天三次,而中午12點和早上8點到下午4點,每天的每一分鐘。在給定時間內執行60次執行。因此,根據腳本,它可能會運行一個小時。

如果腳本運行2-3分鐘,你應該看到在並行2-3的任務,如果你在這段時間使用ps命令。您可能還想調查系統日誌。應該爲每個命令crond每分鐘開始一個日誌條目。

添加小時的分鐘時,您的cronjob應該開始解決這個問題(例如,12,如果你想每天凌晨12點上和上午8點到下午4點的12分鐘你的cronjob運行):

12 0,8,16 * * * /opt/maintenance/backup-databases.sh 
+0

我同意ASC ..沒有注意到。 –

3

創建一個包裝腳本調用wrap.sh和裏面那個把下面的線和在crontab中調用wrap.sh。如果您將STDOUT/STDERR引用到文件以查找任何輸出/錯誤,它不會受到傷害。 您可以使用時間戳記作爲日誌文件名稱。另外,在你的主備份腳本.sh中,你可以提供一些echo語句來查看發生了什麼,例如當你打開日誌文件時,它會顯示你的回顯消息,這些消息會顯示過時的備份操作和時間命令輸出結束向您顯示完成整個wrap.sh腳本(它調用備份腳本..)需要多少時間。

#!/bin/bash 
DATE="$(date +"%m%d%Y%H%M%S")"; 
time /opt/maintenance/backup-databases.sh > /some/directory/${DATE}.wrap.log 2>&1 

,如果你的備份腳本是像(注意,這裏我們使用的實際日期命令,而不是日期變量)。

a 
# then do someone like 
echo $(date +"%m%d%Y%H%M%S") -- step A: completed. 
b 
echo $(date +"%m%d%Y%H%M%S") -- step B: completed. 
c 
echo $(date +"%m%d%Y%H%M%S") -- step C: completed. 
d 

如果你只是爲了調試尋找:然後執行以下(bash的-x或sh -x或ksh -x等,如下圖所示):

#!/bin/bash 
DATE="$(date +"%m%d%Y%H%M%S")"; 
time bash -x /opt/maintenance/backup-databases.sh > /some/directory/${DATE}.wrap.log 2>&1 
1

您可以隨時計時您的腳本

time /opt/maintenance/backup-databases.sh 2>&1 | egrep real 

或者在shell腳本中輸入一些帶有一些信息的日誌文件。

+0

想知道..輸出將去..如果這是在crontab中的位置?因爲你正在將STDOUT(1)和STDERR(2)轉到&1(1的地址,也就是STDOUT所在的地方,這是監視器/屏幕),對嗎? –

相關問題