我已经看到很多用于在linux中守护python脚本的脚本,但没有太多关于如何使用它们的信息。有人可以指导我吗?
我目前有一个冗长的python脚本,它会在套接字上侦听传入的消息,如果正确的格式接受它,然后将其存储到数据库中。脚本本身只是打开套接字,然后一会儿就听(这可以完成工作!)并完成所有工作。
要守护它,我是否必须修改当前脚本或从单独的脚本调用它?我见过这两个例子,但都没有工作。
另外,我正在使用virtualenv,这可能是我的问题的根源,有关使用守护程序脚本的任何提示吗?
答案 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和一些参数给我执行的程序。