Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
定期检查python脚本是否正在运行的服务,如果它不运行,则重新启动它';T_Python_Bash_Raspberry Pi - Fatal编程技术网

定期检查python脚本是否正在运行的服务,如果它不运行,则重新启动它';T

定期检查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;

我有一个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;
    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进程结束并重新启动。