supervisord非常适合这类事情.虽然我曾经用cron作业检查程序是否每隔几分钟仍在运行,但是supervisord在进程内线程中运行所有程序,因此在程序终止的情况下,supervisord将自动重启该进程.我不再需要解析ps的输出来查看程序是否崩溃.
它有一个简单的声明配置文件和可配置的日志记录.默认情况下,它会为你的程序名-stderr.log创建一个日志文件your-program-name-stdout.log,当从OS包管理器安装supervisord时,它会由logrotate自动处理(对我来说是Debian).
如果你不想配置supervisord的日志记录,你应该在python中查看logging,这样你就可以控制进入这些文件的内容.
如果您使用的是debian衍生产品,您应该能够通过以root身份执行apt-get install supervisord来安装和启动该守护程序.
配置文件也非常简单:
[program:myprogram]
command=/path/to/my/program/script
directory=/path/to/my/program/base
user=myuser
autostart=true
autorestart=true
redirect_stderr=True
supervisorctl还允许您以交互方式查看您的程序正在执行的操作,并可以使用supervisorctl启动myprogram等启动和停止多个程序