Python中守护进程的实现示例

6 投票
3 回答
1451 浏览
提问于 2025-04-16 05:56

有没有人知道用Python写的一个能正常运行并且文档齐全的守护进程实现?如果你知道有这样的项目,请在这里分享链接。

3 个回答

1

查看这个链接,了解如何创建一个双重分叉的守护进程:http://code.activestate.com/recipes/278731-creating-a-daemon-the-python-way/

这段代码很容易读懂,而且注释也写得很好。如果你想深入了解Unix守护进程,可以看看W. Richard的书《UNIX环境高级编程》第13章,里面有详细的信息。

4

如果你只是想运行一个守护进程,可以考虑使用Supervisor,它是一个专门用来控制和管理其他守护进程的工具。

如果你想深入了解一些细节,可以看看Supervisor的启动脚本,或者查看一些对此懒人请求的回复。

4

我想到三种方法:

  1. 创建一个定时任务来调用你的脚本。定时任务(cron)是一个在GNU/Linux系统上运行的程序,它会按照你设定的时间表定期启动脚本。你可以把你的脚本添加到一个叫做crontab的文件里,或者把它的快捷方式放到一个特定的目录中,这样这个程序就会在后台自动运行你的脚本。想了解更多可以去维基百科看看。虽然有很多不同的定时任务程序,但你的GNU/Linux系统应该已经安装了其中一个。
  2. 用Python的方式(比如一个库)让你的脚本自己变成一个后台程序。是的,这需要一个简单的事件循环(事件可能是定时器触发的,可能会用到sleep函数)。我推荐并使用的这个链接是:用Python创建一个简单的Unix/Linux后台程序
  3. 使用Python的multiprocessing模块。这个实现隐藏了很多复杂的细节,比如如何分叉一个进程等。这个方法非常简洁。

我不太推荐第二种或第三种方法,因为实际上你是在重复定时任务的功能。Linux系统的设计理念是让多个简单的工具相互配合来解决问题。除非你有其他理由需要创建一个后台程序(除了定期触发),否则选择第一种方法更好。

另外,如果你用循环来实现后台程序,并且发生了崩溃,确保你有日志可以帮助你调试。同时,想办法让脚本能够重新启动。而如果你把脚本添加为定时任务,它会在你设定的时间间隔内再次触发。

撰写回答