【问题标题】:How to make the screen session restart the program by itself if the program crashes? (Running on DigitalOcean)如果程序崩溃,如何使屏幕会话自行重启程序? (在 DigitalOcean 上运行)
【发布时间】:2015-12-08 21:45:50
【问题描述】:

我正在 Digital Ocean 的屏幕会话中运行 Python 脚本。如果它崩溃了,如何让它自动重新启动?

【问题讨论】:

    标签: python service gnu-screen


    【解决方案1】:

    我不确定 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
    

    【讨论】:

    • 谢谢!这似乎正是我所需要的。无论如何,由于我的脚本在 digitalocean 上,我可能需要做哪些更改?我尝试向主管倾斜,但信息似乎压倒性的。你解释得很好。
    • 面临这个错误: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'
    猜你喜欢
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 2018-11-27
    相关资源
    最近更新 更多