python:如何在Linux中编写守护进程

时间:2011-01-21 05:38:50

标签: python linux

我有一个运行的.py文件:

python a.py&

我正在使用ssh来运行命令,之后我必须注销。经过一段时间后,我发现该过程已退出。我怀疑是Linux发送了一些信号吗?我想如果我可以制作守护进程那么我可以避免这个吗?

5 个答案:

答案 0 :(得分:7)

虽然nohup会起作用,但这是一个快速而肮脏的解决方案。要制作正确的守护程序进程,您需要使用SysV init或(如果您运行的是Ubuntu 6.10+或Fedora 9+)upstart。

这是一个简单的脚本,它启动a.py并在它被杀死时重新启动它(在5分钟内最多5次):

respawn

respawn limit 5 300

exec python /path/to/a.py

然后将该脚本放入/etc/init/

Upstart也有很多选择。查看Quick Start教程。

答案 1 :(得分:5)

答案 2 :(得分:4)

我对Brian Clapper的daemonize.py感到非常满意,基于FreeBSD的daemon(1)

http://software.clapper.org/daemonize/

http://github.com/bmc/daemonize

自2009年1月起,PEP 3143包含指向拟议参考实施,设计目标,引文(史蒂文斯)和其他来源的链接。

答案 3 :(得分:3)

使用' nohup'运行它在shell退出时忽略信号:

nohup python a.py &

答案 4 :(得分:2)

您还可以使用屏幕实用程序,允许您在单个终端窗口或远程终端会话中访问多个单独的终端会话。

这意味着您可以设置屏幕会话(使用您选择的名称),在其中启动程序(例如使用&),从会话中分离,然后重新连接。

开始一个未命名的屏幕。

$ screen

要创建具有特定名称的新会话,请使用:

$ screen -S backup

- 这两个命令都创建了一个新的持久会话,您可以将它用作常规终端窗口,即发出命令和运行脚本。

如果您想在不终止会话的情况下离开会话,请使用:

Ctrl+a d command (press and hold Ctrl, press and hold a, then press d) to detach from the session.

要查看全局屏幕列表:

$ screen -ls 

将正在运行的屏幕附加到控制台:

$ screen -R

当屏幕正在运行时,可以使用以下键组合并将其附加到控制台。所有关键的组合都是在按下控制的同时开始的。

ctrl+a d - detach the screen, and let it run without user interface (as described above)
ctrl+a c - create a new terminal
ctrl+a A - set the name of the current terminal
ctrl+a n - switch to next terminal
ctrl+a p - switch to prev terminal
ctrl+a " - list the of terminals