pydoc 网络服务器的 Upstart

pydoc 网络服务器的 Upstart

我正在尝试使用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》的其余部分:

相关内容