使用virtualenv在debian中守护python脚本

ing*_*.am 8 python linux debian daemon virtualenv

我已经看到很多用于在linux中守护python脚本的脚本,但没有太多关于如何使用它们的信息.谁能指导我这个?

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

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

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

Som*_*ude 7

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

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

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

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

#!/bin/sh
/path/to/program &
Run Code Online (Sandbox Code Playgroud)

&使得在后台运行的程序,所以它不会停止启动过程的其余部分.

要获得更完整的脚本,请复制/etc/init.d/skeleton并编辑新文件.编辑的重要部分是在一开始(之间的块### BEGIN INIT INFO### END INIT INFO,其用于由所述update-rc.d程序)的,并且NAME,DAEMONDAEMON_ARGS变量.希望这应该是制作启动脚本所需的全部内容.

像这样激活脚本:

sudo update-rc.d <name of script> defaults
sudo update-rc.d <name of script> enable
Run Code Online (Sandbox Code Playgroud)

并开始它:

sudo update-rc.d <name of script> start
Run Code Online (Sandbox Code Playgroud)

<name of script>只是名称,而不是完整的路径.


Jes*_*ith 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
Run Code Online (Sandbox Code Playgroud)

当您需要在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和我执行的程序的一些参数.