後臺跑指令碼替代crontab

cccgw發表於2009-12-05

crontab是個不錯的東西,但他可能會在一個指令碼未結束時又啟動了同樣的指令碼。最大的問題是他每次都要讀指令碼、編譯、然後執行。這樣很耗CPU。我們可以這樣替代:

# main execution block
while (1) {
runTask()
sleep 60;
}
[@more@]

在UNIX下我們常把指令碼放在crontab裡呼叫,如

* * * * * /opt/application/bin/batch1.pl * * * * * /opt/application/bin/process.pl /tmp/foo * * * * * /opt/application/bin/process.pl /tmp/bar * * * * * /opt/application/bin/submit.pl

crontab是個不錯的東西,但他可能會在一個指令碼未結束時又啟動了同樣的指令碼。最大的問題是他每次都要讀指令碼、編譯、然後執行。這樣很耗CPU。我們可以這樣替代:

# main execution block
while (1) {
runTask()
sleep 60;
}

Or, if you really need to start on the zero second….

# main execution block
while (1) {
runTask()
sleep 1 # we need this to prevent the task from running more than once during the 0 second.
while (((localtime(time))[0] != 0) {
sleep 1;

}
我們可以在系統啟動時跑這樣的指令碼,在後臺執行。
可以在一個指令碼里跑多個任務,也可以多個指令碼在後臺同時跑。可以把指令碼放在inittab,這樣系統啟動時就自動跑了。還有個問題就是如果指令碼出錯停止了,沒有什麼來重跑他,所以要做好報錯機制。
參考:http://www.oreillynet.com/sysadmin/blog/2006/08/scheduling_perl_scripts_outsid.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/668365/viewspace-1029394/,如需轉載,請註明出處,否則將追究法律責任。

相關文章