OS X上的Pylons:如何正确设置launchd plist以启动并保持Pylons服务器?
更新:问题只是因为在Pylons应用中出现了导入错误(因为在运行launchd任务时,$PYTHONPATH是不同的),这导致了失败后重启的循环。非常感谢那些建议我查看日志的人。
大家好,
我在使用OS X,想设置一个launchd任务来启动并保持我的pylons应用运行。
我像往常一样加载这个任务:
sudo launchctl unload /Library/LaunchDaemons/dvlf.plist
在终端中没有看到错误信息。服务器始终无法启动。相反,我在控制台上看到的是:
4/12/11 6:23:57 PM com.apple.launchd[1] (com.dvlf.pylons) Throttling respawn: Will start in 9 seconds
这是我的.plist文件。任何建议都非常感谢!
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<false/>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>com.dvlf.pylons</string>
<key>EnvironmentVariables</key>
<dict>
<key>PYTHON_EGG_CACHE</key>
<string>/tmp/.python-eggs</string>
</dict>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/paster</string>
<string>serve</string>
<string>--reload</string>
<string>/Volumes/w/artfl/projects/dodgr/servers/pylons/DODGR/production.ini</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>Umask</key>
<integer>7</integer>
<key>UserName</key>
<string>_www</string>
<key>WorkingDirectory</key>
<string>/Volumes/w/artfl/projects/dodgr/servers/pylons/DODGR/</string>
<key>StandardErrorPath</key>
<string>/var/log/dvlf_paster_error.log</string>
<key>StandardOutPath</key>
<string>/var/log/dvlf_output.log</string>
</dict>
</plist>
2 个回答
1
重启消息通常是因为程序在启动后不久就崩溃了,这可能是因为配置有问题。所以,先检查一下你的日志文件。
根据plist文件:你真的有这些目录或文件吗?(检查一下plist里的所有路径 - 这是最常见的错误)
/Volumes/w/artfl/projects/dodgr/servers/pylons/DODGR/production.ini
/Volumes/w/artfl/projects/dodgr/servers/pylons/DODGR/
如果没有,你需要重新编辑你的plist文件。
2
当我在SysV初始化系统中看到“重启太快”的问题时(比如在/etc/inittab文件里),通常是因为相关的程序使用了传统的“双重分叉然后执行”的方法来变成守护进程。很多这样的程序(比如sshd和syslogd)支持一些命令行选项(例如sshd的-D选项),可以让它们不去执行fork()
。
问题在于init(还有可能是launchd)在监控这个进程,以便在它退出时重新启动它。当程序试图将自己放到后台(也就是与父进程、进程组和所有相关的信号处理断开连接)时,这会被检测为几乎立即退出,这就需要重新启动。inittab(同样,可能还有launchd)会限制重启的频率,以防止一个失败的程序让系统过于繁忙。
解决这个问题的方法是看看能否配置这个dvlfs.pylons程序,让它在前台运行,或者使用“不要分离”或“不要变成守护进程”等类似的术语。