【发布时间】:2015-12-08 21:45:50
【问题描述】:
我正在 Digital Ocean 的屏幕会话中运行 Python 脚本。如果它崩溃了,如何让它自动重新启动?
【问题讨论】:
标签: python service gnu-screen
我正在 Digital Ocean 的屏幕会话中运行 Python 脚本。如果它崩溃了,如何让它自动重新启动?
【问题讨论】:
标签: python service gnu-screen
我不确定 screen 是否有这种能力来监控生命迹象的过程,但我认为像 supervisor 这样的东西会帮助你。 screen 的目的只是为了让您可以在与 ssh 断开连接的情况下保持 shell 运行。
您可以使用 pip 或 easy_install 下载并安装(以 root 身份)supervisor(需要互联网访问)
pip install supervisor
或
easy_install supervisor
然后在编辑器中创建并打开/etc/supervisord.conf 并使用此标准配置填充它,或者通过挖掘various config options 创建您自己的配置。
[supervisord]
logfile=/tmp/supervisord.log
logfile_maxbytes=50MB ; change these depending on how many logs
logfile_backups=10 ; you want to keep
loglevel=info
pidfile=/tmp/supervisord.pid
nodaemon=true
minfds=1024
minprocs=200
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
[program:myscript]
command=python /path/to/myscript.py ; change to your actual script
autostart=true
autorestart=unexpected ; only restarts when your script has been up for > 1 second and exited with a non-zero exit code.
redirect_stderr=true
stdout_logfile=/var/log/myscript.log
那么您只需启动主管,而不是直接启动您的脚本。
/usr/local/bin/supervisord -c /etc/supervisord.conf
【讨论】:
2015-12-08 17:32:53,762 INFO success: myscript entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2015-12-08 17:32:58,863 INFO exited: myscript (exit status 1; not expected)
/var/log/myscript.log 的输出(这是主管重定向标准输出和标准错误的地方)
File "/root/folder/myscript/py", line 172, in <module> copy_ids_from_file(stored_ids) File "/root/folder/myscript/py", line 42, in copy_ids_from_file cache_file = open(file_name) IOError: [Errno 2] No such file or directory: 'cachefile'