如何在后台运行 Python 脚本并在崩溃后重新启动它?

seb*_*piq 10 python upstart monitoring

我有一个非常简单的 Python 脚本,我希望它始终在我的 Ubuntu 12.04 服务器上运行。我想过使用 upstart + monit。问题是这些工具对于像我这样的普通人来说似乎相当复杂,而且我在网上找不到简单的例子。

暴发户 + monit 是否矫枉过正?有人知道更简单的替代方案,还是新贵 + monit 的好教程?如果我只是想确保脚本始终在运行,那么是否需要 monit?

Spa*_*apS 16

最简单的方法是把它放在/etc/init/something.conf

start on runlevel [2345]
stop on runlevel [016]

respawn
exec python /path/to/your/script.py
Run Code Online (Sandbox Code Playgroud)

如果它被杀死或退出非零(如未捕获的异常),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
Run Code Online (Sandbox Code Playgroud)

如果您的脚本在没有可用网络时退出,并且您计划在不稳定的网络连接上运行它,那么您应该修复该问题并使其保持活动状态/重试。但如果不能,您可能还需要在网络设备出现时手动启动它。所以你可以把它放在/etc/network/if-up.d/yourscript(用 chmod +x 使它可执行)

#!/bin/sh
exec start wait-for-state WAITER=$IFACE-yourscript WAIT_FOR=something
Run Code Online (Sandbox Code Playgroud)

你的脚本只是这个特定脚本的任意和独特的东西,“东西”与作业名称相同(例如/etc/init/something.conf之前建议的)。