我正在尝试使用upstart
,以便pydoc
我正在开发的包的 Web 服务器始终运行。如果我从命令行运行它:
pydoc -p 7464 /some_path/my_python_package
它运行良好,并显示localhost:7464/my_python_package
文档。但是,如果我将其放入 upstart 脚本中,例如
start on startup
start on runlevel [2,3,4,5]
stop on runlevel [0,1,6]
script
pydoc -p 7464 /some_path/my_python_package
end script
然后当我打开浏览器时,localhost:7464/my_python_package
我得到以下信息:
no Python documentation found for 'my_python_package'
请注意,localhost:7464
所有标准 python 包都显示正常,因此看起来 upstart 没有正确解析路径。
我尝试输入export PYTHONPATH='/some_path'
并更改执行行,pydoc -p 7464 $PYTHONPATH/my_python_package
但这也不起作用。
答案1
您在该作业中指定的语法不正确:
- 您有多个“
start on
”节。 - 最后一个“
start on
”节将被考虑,但是您的节由于在运行级别之间使用逗号而无效(stop on
由于同样的原因,您的“ ”无效)。
你想要这样的东西:
start on runlevel [2345]
stop on runlevel [016]
script
pydoc -p 7464 /some_path/my_python_package
end script
请注意,对于 0.9.7 及更高版本的 Upstart(换句话说,Ubuntu Natty 或更新版本 - 请参阅https://wiki.ubuntu.com/NattyNarwhal/TechnicalOverviewUpstart),有一个名为的新命令init-checkconf
可以检查脚本中的语法错误。使用方法很简单:
$ init-checkconf myjob.conf
请注意,您必须init-checkconf
以您的用户身份运行(不是根)。
另外,您是否将其作为系统作业运行(作业文件位于 /etc/init/ 中?)如果是,您是否真的需要以 root 身份运行该服务?如果不是,请参见:
http://upstart.ubuntu.com/cookbook/#run-a-job-as-a-different-user
如果是的话,您是否真的需要以 root 用户身份运行该服务?
最后,我强烈建议大家看一下《Upstart Cookbook》的其余部分: