我见过很多在Linux中将python脚本守护进程化的脚本,但是没有太多关于如何使用它们的信息。有人能在这方面指导我吗?
我目前有一个冗长的python脚本,它在socket上监听传入的消息,如果格式正确,就接受它,然后将其存储到数据库中。脚本本身只是打开socket,然后监听while true(它完成了这项工作!)并在那里完成所有工作。
要将其守护进程化,我必须修改当前脚本还是从单独的脚本调用它?
另外,我正在使用virtualenv,这可能是我的问题的根源,有什么关于在后台脚本中使用它的提示吗?
2条答案
按热度按时间u3r8eeie1#
创建一个shell脚本来激活虚拟环境,并在后台运行Python脚本。
另外,在虚拟环境中应该有一个python模块,你可以导入和激活环境。我现在没有virtualenv,所以我不能检查它在哪里,但是在虚拟环境中搜索
activate
(或类似的东西),你应该可以找到它。当计算机引导时,启动守护程序所需的绝对最小脚本是:
字符串
&
使程序在后台运行,所以它不会停止其余的 Boot 过程。要获得更完整的脚本,请复制
/etc/init.d/skeleton
并编辑新文件。要编辑的重要部分是开始的块(### BEGIN INIT INFO
和### END INIT INFO
之间,update-rc.d
程序使用),以及NAME
,DAEMON
和DAEMON_ARGS
变量。希望这应该是制作启动脚本所需的全部内容。激活脚本如下所示:
型
要启动它:
型
<name of script>
只是名称,不是完整路径。mspsb9vt2#
字符串
当你需要在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和一些参数。