Answers:
最简单的方法是将其放在/etc/init/something.conf
:
start on runlevel [2345]
stop on runlevel [016]
respawn
exec python /path/to/your/script.py
如果它被杀死或退出非零值(例如未捕获的异常),则Respawn将启动它的备份。可以回溯到Ubuntu 10.04。
如果您拥有12.04,则可以得到更多的花哨。上面的代码将以root身份运行您的脚本。在12.04中,您可以添加setuid / setgid:
start on runlevel [2345]
stop on runlevel [016]
respawn
setuid nobody
setgid nogroup
exec python /path/to/your/python.py
如果您的脚本在没有网络可用时退出,并且您打算在不稳定的网络连接上运行它,那么,您应该修复该问题并使其保持活动状态/重试。但是,如果不能这样做,则每当网络设备启动时,您可能还需要手动启动它。因此,您可以将其放入/etc/network/if-up.d/yourscript
(使用chmod + x使其可执行)
#!/bin/sh
exec start wait-for-state WAITER=$IFACE-yourscript WAIT_FOR=something
yourscript只是此特定脚本的任意和唯一的内容,而“ something”与作业名称相同(如/etc/init/something.conf
先前建议的名称)。
upstart
对吗?这是否意味着脚本也将在引导时启动(太棒了!)?并且respawn
足够您不需要进行设置monit
吗?
从过去开始,通常的做法是将包含时间戳记或进程ID的文件写入 /tmp
,然后检查该进程ID是否仍在运行,或者分别检查时间戳是否是最近的。
你也可以做一个简单的 while [ 1 ]; do phyton-script.ph; done
的操作,以防脚本返回时重新启动。
有关更多可能性,请提供有关脚本的更多信息。特别是关于为什么您期望它意外退出或崩溃的原因。