如何让screen session在程序崩溃时自行重启程序? (运行 在 DigitalOcean 上)
How to make the screen session restart the program by itself if the program crashes? (Running on DigitalOcean)
我是 运行 Digital Ocean 屏幕会话中的 Python 脚本。如果死机了,如何让它再次自动重启?
我不确定 screen 是否具有监视进程生命迹象的能力,但我认为 supervisor 之类的东西会对您有所帮助。 screen 的目的只是为了让你可以留下 shell 运行 即使你已经断开了与 ssh 的连接。
您可以使用 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
我是 运行 Digital Ocean 屏幕会话中的 Python 脚本。如果死机了,如何让它再次自动重启?
我不确定 screen 是否具有监视进程生命迹象的能力,但我认为 supervisor 之类的东西会对您有所帮助。 screen 的目的只是为了让你可以留下 shell 运行 即使你已经断开了与 ssh 的连接。
您可以使用 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