2017-08-15 100 views
3

我有一個Python腳本,我想從一個cronjob運行,然後檢查每一分鐘以查看它是否仍在運行,如果沒有,則再次啓動它。使用cronjob運行Python進程並檢查它是否仍在運行每分鐘

的cronjob是:

/usr/bin/python2.7 /home/mydir/public_html/myotherdir/script.py 

有一些這方面的信息,但大多數的答案真的不詳細全過程清晰,例如:

Using cron job to check if python script is running

例如在這種情況下,它沒有說明如何運行初始過程並記錄PID。不幸的是,它給我留下了很多問題。

因此,任何人都可以給我一個簡單的指導如何做到這一點?

例如需要完整的shell腳本,啓動腳本的命令,等等。

+0

[只有當它尚未運行運行cron作業(可能的重複https://stackoverflow.com/questions/2366693/run- cron-job-only-if-it-isnt-already-running) –

+0

我不會從cron運行它。我將創建一個服務器進程作爲O/S啓動腳本(Linux上的Iinit.d)的一部分,並將其配置爲在故障或崩潰時重新啓動。我沒有在十多年做到了這一點,所以我會建議嘗試堆棧交換serverfault研究這個。更多的系統管理員問題。 – LAS

回答

3

這並不難。首先成立了crontab運行檢查每分鐘:

* * * * * /home/mydir/check_and_start_script.sh 

現在/home/mydir/check_and_start_script.sh

#!/bin/bash 
pid_file='/home/mydir/script.pid' 
if [ ! -s "$pid_file" ] || ! kill -0 $(cat $pid_file) > /dev/null 2>&1; then 
    echo $$ > "$pid_file" 
    exec /usr/bin/python2.7 /home/mydir/public_html/myotherdir/script.py 
fi 

它檢查是否有與腳本的最後運行的進程ID的文件。如果它在那裏,它會讀取pid並檢查進程是否仍在運行。如果沒有,那麼它會將當前運行的shell的pid放在文件中,並在同一進程中執行python腳本,終止shell。否則,它什麼都不做。

不要忘了使腳本可執行

chmod 755 /home/mydir/check_and_start_script.sh 
1

你實際上應該退一步,想什麼,爲什麼你在做它

你需要真正從cron啓動long_running程序?我問的原因是你然後寫另一個程序(觀察者),開始你的long_running程序。我希望你看到喲實際上不需要cron來啓動你的long_running程序。

所以你有什麼是觀察者每分鐘發射並開始long_running程序,如果它沒有運行。

現在你需要真正理解你要做什麼,因爲有很多方法可以完成。如果這是一個練習,觀察者可以調用ps並從那裏運行,如果它運行並啓動它。 在bash,你可以做

[ -z "$(ps -ef | grep -v grep | grep myprogname)" ] && { echo runit; } 

你只是名稱替換myprogname,並啓動你的long_running代碼上回地面指揮運行它 - 也許

但是你應該使用另一種工具。 systemd,守護進程或其他人

相關問題