2013-09-27 77 views
0

我有計劃或多或少像這樣的IBM AIX服務器上cron工作:IBM AIX cron作業不執行

0 6 * * * (date >> ~/executions.log;. ~/.profile; cd /usr/path/to/the/script; /usr/path/to/the/script/ThisIsTheScript.sh) > /dev/null 2>&1 

當我安排一個試運行是這樣的:

0,37 6 * * * (date >> ~/executions.log;. ~/.profile; cd /usr/path/to/the/script; /usr/path/to/the/script/ThisIsTheScript.sh) > /dev/null 2>&1 

...該作業只會運行到它將最後執行日期追加到~/executions.log的部分。由於這個腳本調用了一個非常大的應用程序 - 我們稱之爲gargantuanprogram - 一旦作業觸發它應該顯示在ps ax | grep gargantuanprogram上。但它並沒有,它甚至不運行ThisIsTheScript.sh,因爲所述腳本在啓動時發出電子郵件通知,並且在我的郵箱中我只是獲得了nada。

正如你所看到的,是的,我正在加載我的~/profile,我檢查了很多次腳本具有執行權限,並且我絕對確定該行是正確寫入的。 crontab也以換行符結束。那麼爲什麼這個工作沒有執行?

回答

1

通常我所做的是我有一個腳本可以工作。然後我用另一個腳本包裝該腳本來爲cron設置一些東西,比如source .profile,重定向stdout和stderr,記錄錯誤等等。我把條目保存在crontab本身中非常簡單和乾淨。它只是更容易和調試。

通常情況下,像這樣的問題的人會在他們的.profile中添加一些假設控制tty已連接的東西(比如stty或類似的東西)。我在.profiles中的另一件事是打開跟蹤的功能,以便我可以看到.profile加載正在死亡的位置。用「set -x」做到這一點。實際上我有一個.profiles樹,所以我在頂部設置了一個變量,如果設置了-x,那麼設置-x。

shell不會交互,也不會有控制tty。這是非常罕見的,並且經常會在用戶的配置文件中混淆某些內容。 shell可能是「sh」,雖然它不是假設的,但它可能與/ bin/ksh有一些細微的差別。

希望這會有幫助

+0

經過一個小時的抨擊我的頭對桌子後,我終於找到原因。原因是什麼?......我認爲我應該調用沒有參數的腳本,比如crontab中的其餘腳本,但不行,這一次我不得不用特殊的參數來調用它。這項工作開展得很好,我放的腳手架實際上很好,這是腳本,因爲它應該沒有被調用。 – RAKK

+0

所以基本上,所學到的教訓是始終確保我是否真的應該以這種方式調用腳本。 – RAKK