需要Python应用的init.d脚本
我有一个基于Python的应用程序,它的功能像一个信息聚合器。我希望这个程序能加入到init.d脚本中,这样我就可以通过启动、停止和重启的选项来控制它的运行。此外,我还想把这个init.d脚本设置成一个定时任务(我这里有个例子)。
我在这里找到一个示例 http://homepage.hispeed.ch/py430/python/daemon
(顺便说一下,我不想让这个脚本用Python编写)。
4 个回答
其实这是个反问,但我注意到你提到了cron,这意味着你的应用程序是定期运行的,而不是像守护进程那样持续运行。
那么,对于一个定期运行的应用来说,像启动、停止和重启这样的命令有什么意义呢?我的意思是,你的应用每小时运行一次(或者其他时间间隔),为什么还需要启动、停止和重启呢?
不过,既然你提到了ubuntu,我得说,你链接的脚本并不符合当前ubuntu或debian lenny的标准。你可以在/etc/init.d/skeleton
找到正确的模板。
再说一遍,为什么你需要一个初始化脚本来配合cron作业呢?
编辑
考虑到评论,保持应用程序在崩溃或被终止后仍然运行的“经典”方法是inittab。当然,你也可以用cron作业来实现这个功能。
我最近做了一些类似的事情,写了一些小的配置文件,使用了Supervisord。
在初始化脚本中(基本上是最简单的版本),我只是用合适的参数调用了supervisor-ctl。
另外,你需要注意的是,实际的功能(比如start-stop-daemon
)在不同的操作系统版本中是有所不同的。
你可以考虑为使用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
把这个内容添加到一个文件里,比如叫'zeya.conf',放在/etc/init目录下。
然后你就可以用'initctl'来控制这个任务。例如:
initctl status zeya
initctl stop zeya