【问题标题】:Need init.d script for Python application需要 Python 应用程序的 init.d 脚本
【发布时间】:2026-02-16 14:10:01
【问题描述】:

我有一个基于 python 的应用程序,它的工作方式类似于提要聚合器,并且需要成为 init.d 脚本的一部分,以便我可以使用启动/停止/重启选项控制执行。此外,我希望将 init.d 脚本设置为 cron 作业(我在这里有示例)。

我在这里找到了一个样本http://homepage.hispeed.ch/py430/python/daemon

(PS。我不希望脚本本身用python编写)。

【问题讨论】:

    标签: python ubuntu init.d


    【解决方案1】:

    您可以考虑为使用 Upstart 的操作系统编写 Upstart 任务。

    例子:

    # Start zeya
    #
    
    description     "Start Zeya music server"
    
    start on startup
    
    task
    exec python /home/r00t/code-hacking/serve-music/zeya/src/zeya/zeya.py
    --path=/home/r00t/Music
    

    将此添加到文件中,例如 /etc/init 中的“zeya.conf”

    然后您可以使用“initctl”来控制作业。例如:

    initctl status zeya
    initctl stop zeya
    

    【讨论】:

    • 感谢您的建议。我从来没有听说过你有任何基于 python 的应用程序的示例或链接吗?得到这个链接upstart.ubuntu.com
    • 这是 init.d 的替代品吗?我会学习这个,让我决定?由于我是新手,你可以建议我。我想要一些易于配置和操作的东西
    • Upstart 是 init 守护进程的替代品。
    【解决方案2】:

    我最近做了类似的事情,并使用Supervisord 编写了一些小配置文件。

    从初始化脚本(几乎是准系统)中,我简单地调用了带有适当参数的 supervisor-ctl。

    此外,您应该注意实际功能(例如start-stop-daemon)因发行版而异。

    【讨论】:

    • 嘿 bangpyper,感谢您提到 supervisord。我会看看那个和暴发户和supervisord。
    【解决方案3】:

    确实是一个反问,但我注意到,您提到了 cron,意思是,您的应用将以所谓的守护进程方式定期运行,而不是连续运行。

    对于定期运行的应用程序,使用启动、停止和重新启动等命令有什么意义?我的意思是,您的应用程序将每小时运行一次(或其他),为什么需要启动、停止和重新启动?

    无论如何,既然你提到了 ubuntu,我必须说,你链接的脚本不符合当前的 initscripts 标准,无论是 ubuntu 还是 debian lenny。在/etc/init.d/skeleton

    中可以看到正确的模板

    重申一下,为什么您需要 initscript 来执行 cron 作业

    编辑
    考虑到评论,即使应用程序崩溃或被终止,保持应用程序运行的有点“规范”的方法是inittab。当然,您也可以使用 cron 作业来完成。

    【讨论】:

    • 这不是周期性任务。如果它崩溃了,我使用 cron 启动服务:-)。
    • 好吧,公平地说,你的问题中没有说明
    • 这是我的错误,对此深表歉意。事实上,我不知道如果应用程序崩溃了如何重新启动它,我发现有人说 cron 是在应用程序崩溃时启动应用程序的最佳方式。如果你知道替代方法,我会很感激你。
    • 如果作业正在运行并重新启动它,则进行 cron 作业轮询正在解决导致程序崩溃的错误,不是吗?
    【解决方案4】:

    我在这里找到了一个样本http://homepage.hispeed.ch/py430/python/daemon

    我知道这是一个老问题,但实际上您找到的示例是在 ubuntu 和 debian 中推荐的方法(启动/停止/重新启动)。然后你可以做一个 cron 工作来看看你的程序是否正在运行。

    (PS。我不希望脚本本身用python编写)。

    脚本是用 shell 命令语言编写的。

    【讨论】: