定期检查python脚本是否正在运行的服务,如果它不运行,则重新启动它';T
我有一个python程序,它应该是不间断运行的。如果发生错误,我需要一个定期(例如每小时)检查程序是否正在运行的服务,如果没有,则重新启动程序 我正在做覆盆子圆周率 我曾经尝试过这样使用bash:定期检查python脚本是否正在运行的服务,如果它不运行,则重新启动它';T,python,bash,raspberry-pi,Python,Bash,Raspberry Pi,我有一个python程序,它应该是不间断运行的。如果发生错误,我需要一个定期(例如每小时)检查程序是否正在运行的服务,如果没有,则重新启动程序 我正在做覆盆子圆周率 我曾经尝试过这样使用bash: #!/bin/bash n=1 while [ $n -le 2 ] do PID=$(pidof -s python3); if [ -z $PID ]; then /usr/bin/python3.5 ~/.../main.py exit 0;
#!/bin/bash
n=1
while [ $n -le 2 ]
do
PID=$(pidof -s python3);
if [ -z $PID ]; then
/usr/bin/python3.5 ~/.../main.py
exit 0;
fi
sleep 1h
done
我只是寻找python3,因为它是唯一将运行的python3程序
但是,它在同一终端窗口中启动程序,我希望它在不同的窗口中运行,因为这两个程序似乎会相互干扰?使用
&
在后台运行脚本:
/usr/bin/python3.5 ~/.../main.py &
如果这意味着要永久运行(与一次性任务相反),那么这不是正确的方法。你应该考虑安装一个合适的过程控制系统
虽然有一些,但考虑到systemd附带了大多数Linux发行版,包括特定于Raspberry Pi的发行版,并且有一些说明,这将是我的第一选择。好吧,所以我自己想出来了,程序不会像前面提到的Be Cooller那样干扰,如果删除
退出0,代码工作正常代码>和sleep 1h
,因为它只会在程序终止后与脚本一起继续。我还添加了一些输出
n=1
while [ $n -le 2 ]
do
PID=$(pidof -s python3);
if [ -z $PID ]; then
echo "Restarting..."
/usr/bin/python3.5 ~/.../main.py
fi
done
为什么这两个程序会相互干扰?在同一个终端窗口中运行时,它们不会感到与我断开连接。“我希望它在不同的窗口中运行”服务通常不会在任何终端窗口中运行-您可能试图解决一个不存在或不应该存在的问题。您是否知道cront
/crontab
和init.d
/systemd
?注意,一个简单的解决方案是接受python进程是bash脚本的子进程;bash脚本应该等待python进程结束并重新启动。