【问题标题】:Forking, daemonizing and monitoring a python script分叉、守护和监控 python 脚本
【发布时间】:2017-05-15 08:22:10
【问题描述】:

我的 debian 服务器上有一个 python 脚本 sc.py。

我想要:

  • 将其作为守护程序运行并使其无限期运行
  • 在 // 中运行 N 次(作为子进程、子进程、分叉)
  • 监控整个进程(以重新启动任何垂死的进程)

你知道可以让我这样做的软件吗?

我不知道我是否必须在 python 端(任何 python 模块或配置)寻找解决方案,或者是否有一个 debian 包可以完成这项工作?

【问题讨论】:

    标签: python linux daemon


    【解决方案1】:

    您可以为此使用supervisord

    它为您守护 Python 进程,并处理子进程。

    【讨论】:

    • 感谢您的帮助。你知道是否有相同类型的工具适用于任何类型的脚本(如 bash)?
    • supervisord 应该适用于任何你可以执行的东西,而不仅仅是 Python。它本身是用 Python 编写的。
    • 是的,这就是我想出来的,我选择了这个完全符合我需求的解决方案。再次感谢。 ;)
    【解决方案2】:

    如果这是一项一次性任务(也就是说,您不是在创建软件产品),我会快速地使用 shell 脚本和终端多路复用器(如 screen)的组合。对于重新启动已死的进程(也就是说,它们发出了不是0 的退出代码),只需use the shell

    例如像这样开始您的流程:

    for i in n/*; do
        screen -d -m -L -S $i -t $i until python sc.py $i; do echo "Crashed with exit code $?.  Respawning.." >&2 ; sleep 1 ; done
    done
    

    这会

    • 为运行脚本的子目录n/ 中的每个文件创建一个新的屏幕会话,
    • 重启你的python脚本,除非它成功退出(使用Bash的until
    • 将标题 (-t) 和会话名称 (-S) 设置为输入文件名,
    • 如果出现问题(-L),则打开所有输出的日志记录以供日后检查。

    然后您可以使用普通的屏幕命令,例如 screen -list 列出所有正在运行的任务,并使用 screen -r <session name> 查看正在运行的会话输出。

    【讨论】:

    • 感谢您的考虑和花费的时间。我需要我的脚本从启动到关闭作为服务运行,并且在其整个生命周期中,它将在请求到达时处理它们。您认为屏幕是解决方案吗?
    • @Antho 欢迎您!不,我建议不要使用屏幕。我读到有些人实际上在生产中使用这样的设置咳咳,但我建议不要以非交互方式运行它。 zmbq 的回答(supervisord)更适合这种情况。
    • 所以我们同意了...我确实忘记了屏幕,谢谢提醒!
    【解决方案3】:

    我偶然发现的另一个流程管理器是circus

    它看起来更冒险,如果那是你的事;)

    Web 界面比 supervisord 的更丰富:查看一些不错的 screenshots

    【讨论】:

    • 看起来有点复杂,但如果我的需求发生变化,它可能会有所帮助。感谢您的跟进:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 2019-11-15
    • 2021-12-14
    相关资源
    最近更新 更多