如何在Python中创建守护程序?

发布于 2021-02-02 23:21:01

在Google上搜索会发现x2代码段。第一个结果是该代码配方的内容,其中包含大量文档和说明,并在下面进行了一些有用的讨论。

但是,另一个代码示例虽然没有包含太多文档,但包含用于传递命令(例如启动,停止和重新启动)的示例代码。它还会创建一个PID文件,可以方便地检查守护程序是否已在运行等。

这些示例都说明了如何创建守护程序。还有其他需要考虑的事情吗?一个样本比另一个样本好吗,为什么?

关注者
0
被浏览
138
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    当前解决方案

    PEP 3143(标准守护程序进程库)的参考实现现已作为python-daemon提供。

    历史答案

    Sander Marechal的代码示例优于最初于2004年发布的原始代码示例。我曾经为Pyro提供了一个守护程序,但如果不得不这样做,可能会使用Sander的代码。



  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    成为行为良好的守护进程时,有很多事情要注意:

    • 防止核心转储(许多守护程序以root身份运行,并且核心转储可以包含敏感信息)

    • 在chroot监狱中表现正确

    • 根据使用情况适当设置UID,GID,工作目录,umask和其他过程参数

    • 放弃提升suid,sgid特权

    • 关闭所有打开的文件描述符,并根据用例进行排除

    • 正确的行为,如果启动一个已经脱离上下文中,如init,inetd等

    • 为明智的守护程序行为设置信号处理程序,还可以根据用例确定特定的处理程序

    • 重定向标准流stdin,stdout,stderr因为守护进程不再具有控制终端

    • 将PID文件作为合作咨询锁处理,它本身就是蠕虫的完整罐,具有许多相互矛盾但有效的行为方式

    • 在进程终止时允许适当的清理

    • 实际上成为守护进程,而不会导致僵尸

    其中一些是标准的,如规范的Unix文献所述(UNIX环境中的Advanced Programming,已故W. Richard Stevens,Addison-Wesley,1992年)。其他(例如流重定向和PID文件处理)是大多数守护程序用户期望的常规行为,但标准化程度较低。

    PEP 3143 “标准守护程序进程库”规范涵盖了所有这些内容。该蟒蛇守护参考实现工作在Python 2.7版或更高版本,和Python 3.2或更高版本。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看