我有一个.py文件,通过以下方式运行:
python a.py &
我使用ssh运行该命令,之后必须注销。过一段时间后,我发现进程已退出。我怀疑是Linux向其发送了某个信号?如果我能将其设置为守护程序,那么就可以避免这种情况。
respawn
respawn limit 5 300
exec python /path/to/a.py
然后只需将该脚本放置在 /etc/init/
中。
Upstart 还有更多选项。请查看快速入门教程。
我一直很满意来自Brian Clapper的daemonize.py
,它基于FreeBSD的daemon(1)
:
http://software.clapper.org/daemonize/
http://github.com/bmc/daemonize
自2009年1月以来,有PEP 3143,其中包含对拟议的参考实现、设计目标、引用(Stevens)和其他来源的链接。
使用“nohup”运行它,以忽略当您的shell退出时的信号:
nohup python a.py &
您还可以使用screen工具,在单个终端窗口或远程终端会话中访问多个独立的终端会话。
这意味着,您可以设置一个带有自定义名称的屏幕会话,在其中启动一个程序(例如使用&),从会话中分离,并在以后重新连接。
要启动未命名的屏幕,请执行以下操作。
$ 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
当屏幕运行并连接到控制台时,可以使用以下组合键。所有组合键都以同时按下控制和 A 键开始。
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