使用virtualenv在debian中守护python脚本

时间:2011-10-18 12:37:46

标签: python linux debian daemon virtualenv

我已经看到很多用于在linux中守护python脚本的脚本,但没有太多关于如何使用它们的信息。有人可以指导我吗?

我目前有一个冗长的python脚本,它会在套接字上侦听传入的消息,如果正确的格式接受它,然后将其存储到数据库中。脚本本身只是打开套接字,然后一会儿就听(这可以完成工作!)并完成所有工作。

要守护它,我是否必须修改当前脚本或从单独的脚本调用它?我见过这两个例子,但都没有工作。

另外,我正在使用virtualenv,这可能是我的问题的根源,有关使用守护程序脚本的任何提示吗?

2 个答案:

答案 0 :(得分:6)

创建一个激活虚拟环境的shell脚本,并在后台运行Python脚本。

此外,虚拟环境中应该有一个python模块,您也可以从中导入和激活环境。我目前没有virtualenv工作,所以我无法检查它在哪里,但在虚拟环境中搜索activate(或类似的东西),你应该找到它。

编辑:添加了最小的Debian init.d脚本

计算机启动时启动守护程序所需的绝对最小脚本是:

#!/bin/sh
/path/to/program &

&使程序在后台运行,因此它不会停止其余的启动过程。

要获得更完整的脚本,请复制/etc/init.d/skeleton并编辑新文件。要编辑的重要部分是开头的块(### BEGIN INIT INFO### END INIT INFO之间,update-rc.d程序使用)和NAME,{{1} }和DAEMON变量。希望这应该是制作启动脚本所需的全部内容。

激活脚本:

DAEMON_ARGS

开始吧:

sudo update-rc.d <name of script> defaults
sudo update-rc.d <name of script> enable

sudo update-rc.d <name of script> start 只是名称,而不是完整路径。

答案 1 :(得分:5)

script
  export PYTHONPATH=.:/home/ubuntu/.local/lib/python2.7/site-packages/:/home/ubuntu/python/lib/python2.7/site-packages/
  exec start-stop-daemon --start  --chuid ubuntu --exec /home/ubuntu/python_envs/MyProj/bin/python /home/ubuntu/www/MyProj/MyProj.py -- --config-file-dir=/home/ubuntu/www/MyProj/config/ >> /home/ubuntu/startup.log 2>&1 &
end script

当您需要在python virtualenv中运行应用程序时,您可以“激活”virtualenv,或使用该环境的唯一python命令。

根据网站“如果你直接从virtualenv的bin /目录运行脚本或python解释器(例如path / to / env / bin / pip或/ path / to / env / bin / python script.py)没有必要激活。“ - http://pypi.python.org/pypi/virtualenv

我也有一些从源代码编译的python模块。那些需要在PYTHONPATH环境变量中。这可能是你的virtualenv激活的一部分,用virtualwrapper完成,或明确调用(如下所示。)

从UPSTART作业调用程序也可以。我的例子在上面。

在Amazon EC2上的Ubuntu 10.10实例上,我更幸运使用了start-stop-daemon命令。 我还与一些其他暴发户的“节”斗争过。我正在调用一个python应用程序,它具有特定的virtualenv和一些参数给我执行的程序。