linux 在debian中使用virtualenv守护程序化python脚本

2hh7jdfx  于 5个月前  发布在  Linux
关注(0)|答案(2)|浏览(63)

我见过很多在Linux中将python脚本守护进程化的脚本,但是没有太多关于如何使用它们的信息。有人能在这方面指导我吗?
我目前有一个冗长的python脚本,它在socket上监听传入的消息,如果格式正确,就接受它,然后将其存储到数据库中。脚本本身只是打开socket,然后监听while true(它完成了这项工作!)并在那里完成所有工作。
要将其守护进程化,我必须修改当前脚本还是从单独的脚本调用它?
另外,我正在使用virtualenv,这可能是我的问题的根源,有什么关于在后台脚本中使用它的提示吗?

u3r8eeie

u3r8eeie1#

创建一个shell脚本来激活虚拟环境,并在后台运行Python脚本。
另外,在虚拟环境中应该有一个python模块,你可以导入和激活环境。我现在没有virtualenv,所以我不能检查它在哪里,但是在虚拟环境中搜索activate(或类似的东西),你应该可以找到它。

  • 编辑:添加了一个最小的Debian init.d脚本 *

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

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

字符串
&使程序在后台运行,所以它不会停止其余的 Boot 过程。
要获得更完整的脚本,请复制/etc/init.d/skeleton并编辑新文件。要编辑的重要部分是开始的块(### BEGIN INIT INFO### END INIT INFO之间,update-rc.d程序使用),以及NAMEDAEMONDAEMON_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


<name of script>只是名称,不是完整路径。

mspsb9vt

mspsb9vt2#

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解释器(例如路径/to/env/bin/pip或/path/to/env/bin/python script.py),则不需要激活。
我也有一些从源代码编译的python模块。这些需要在PYTHONPATH环境变量中。这可以是你的virtualenv激活的一部分,用virtualwrapper完成,或者显式调用(就像我在上面的例子中所做的那样)。
从一个UPSTART作业调用程序也可以工作。我的例子是上面的。
在Amazon EC2上的一个Ubuntu 10.10示例上,我在使用start-stop-daemon命令时运气比较好。我还在使用其他一些新的“stanzas”。我正在调用一个python应用程序,其中包含一个特定的virtualenv和一些参数。

相关问题