2011-01-21 81 views
3

写守护我有一个由跑了.py文件:蟒蛇:如何在Linux的

蟒蛇a.py &

我使用的是ssh来运行命令,之后我有注销。过了一段时间后,我发现退出了这个过程。我怀疑这是Linux向它发送一些信号?我想如果我可以制作守护进程,那么我可以避免这种情况?

回答

7

虽然nohup的将工作,这是一个快速和肮脏的解决方案。要创建一个适当的守护进程,你需要使用SysV init或者(如果你运行的是Ubuntu 6.10+或者Fedora 9+)暴发户。

这里有一个简单的脚本开始a.py并重新启动它时,它就会被杀死(5次5分钟内跨度):

respawn 

respawn limit 5 300 

exec python /path/to/a.py 

然后,只需把该脚本/etc/init/

Upstart还有很多选择。检查Quick Start教程。

3

与“nohup的”运行它忽略的信号时,你的shell退出:

nohup python a.py & 
1

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

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

启动未命名的屏幕。

$ screen 

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

$ screen -S backup 

- 这些都命令创建一个新的持久的会话,你可以使用它作为一个普通的终端窗口,即发出指令并运行脚本。

如果你想离开会话而不终止它,使用:

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

要查看runnging屏幕的列表:

$ 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