2011-11-30 179 views
2

我有兩個Python腳本作爲cronjobs運行。如何確保一個腳本只能在另一個腳本之後運行

ScriptA處理日誌文件並將記錄插入table,ScriptB使用記錄生成報告。

我已經安排了ScriptA在ScriptB之前一個小時運行,但有時ScriptB在ScriptA完成插入之前運行,從而生成不正確的報告。

如何確保ScriptB在ScriptA完成後立即運行?

編輯 SCRIPTA和ScriptB做完全不同的事情,比如說,一個用於保存用戶數據,另一種是供內部使用。而其他地方可能有一些ScriptC取決於ScriptA。

所以我不能合併這兩個工作。

回答

2

一個辦法是,以確保如果這兩個工作是分開的cron作業 - 有足夠的時間,以其間一定覆蓋作業1.

另一種方法是鎖定的運行,爲他人在這裏建議,但那麼請注意,cron不會因爲鎖定而不能成功完成工作。所以任何一個job2都必須在睡眠週期中運行,直到它不再看到鎖,否則相反會看到一個job 1完成的標誌,否則你將不得不變得富有創造性。

爲什麼不在第一個腳本完成後觸發第2個腳本並將其作爲單個cron作業?

0

讓它寫一個文件,並檢查文件是否存在。

+0

「讓ScriptA寫入文件,然後讓ScriptB定期運行並檢查文件。」你是這個意思嗎? – satoru

+0

是的,正好... – Benjamin

0

您可以使用它的方法!有一些控制旗!某處,例如在DB中!

因此,ScriptB只是在該標誌設置後運行!並在它結束後立即將標誌設置回默認狀態!

另一種可以實現該標誌方法的方法是使用文件系統!像@Benjamin建議!

7

做一個運行ScriptA和ScriptB的cron作業不是更好嗎?這樣,您可以確保ScriptB在ScriptA完成之前不會運行,並且不需要修改任何腳本。

的的cronjob可以運行像一個簡單的shell腳本:

#!/bin/sh 

python ScriptA.py 
python ScriptB.py 

編輯:如果你真的不能合併兩個cron作業,你可以用this question描述的技術等待第一過程完成。

+2

打了我幾秒鐘。爲避免創建包裝腳本,cron可以是:* * * */usr/bin/python ScriptA.py &&/usr/bin/python ScriptB.py,其中&&將確保ScriptA完成除RC0以外的任何操作,ScriptB將根本不運行。 – favoretti

相關問題