2017-08-15 96 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,守护进程或其他人

相关问题