2013-05-29 196 views
4

我试图弄清楚为什么我的守护进程不会自动启动(在Mac 10.8.3上)。但是,它在其他机器上运行良好。这是我在/库/ LaunchDaemons的plist/launchd不启动我的守护进程

<?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>Label</key> 
    <string>com.MyApp.tmsm.launcher</string> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/Library/Application Support/MyApp/tmsmLauncher</string> 
    </array> 
    <key>RunAtLoad</key> 
    <true/> 
    <key>KeepAlive</key> 
    <false/> 
    <key>StartInterval</key> 
    <integer>60</integer> 
    </dict> 
</plist> 

我没有看到/var/log/system.log任何错误消息。我检查了我的daemonpermissionowner。如果我把我的plist放在/System/Library/LaunchDaemons/之下,它可以在reboot之后启动。但对我来说这不是一个好的解决方案。如果我使用“launchctl load /Library/LaunchDaemons/com.MyApp.tmsm.launcher”,它运作良好。如果我安装其他商业软件,这是一个守护进程,并有/Library/LaunchDaemons/下的plist,它也不能启动。

似乎任何plist根据/Library/LaunchDaemons/不是由系统加载。我还尝试使用命令“launchctl log level debug”打开launchctl调试级别,但重新启动后不再有消息。重启后调试级别是否重置?其他日志或配置我可以检查?

谢谢。

+0

请查看作业定义文件。如果发生以下情况,launchd(8)将拒绝加载作业: - 作业定义文件可由“组”或“其他”写入 - 作业定义不属于'root'(或作业定义中指定的用户) - 作业定义文件名不以'.plist'结尾 – LCC

+0

定义文件的权限和所有者是正确的。 '-rw -r - r-- 1个根轮' –

回答

4

尝试使用-w参数加载它:sudo launchctl load -w /Library/LaunchDaemons/blablabla.plist。在Disabled键中看起来像问题。详情请参阅man launchctl

如果这是行不通的,我建议你启用一些日志记录在你的后台程序到文件,看它是否启动(可能只是立即退出?)

+0

手动加载我的守护进程时带/不带-w参数很好。我的守护进程无法在系统启动时自动加载。我的守护进程在开始时确实有日志,并且不显示。我还用'launchctl list'来检查守护进程是否已经加载,并且我看不到列表中的守护进程。 我在'/ var/db/launchd.db/com.apple.launchd/overrides.plist'中选中了Disabled键,但在这个plist上看不到我的守护进程。 –

+0

在您的守护进程将在系统启动时自动启动之前,您需要先使用-w参数加载它。 – cody

0

我找到了病根......这是相当愚蠢的... 我的plist在/ Library/LaunchDaemons下的权限是正确的。但是,/ Library/LaunchDaemons /的权限被修改为755.这就是为什么任何在/ Library/LaunchDaemons /下注册的守护进程无法自动加载...

+13

什么样的权限解决了你的问题? – oskarth

+0

/Library/LaunchDaemons在我的系统上的权限是755,它工作正常。我自己并没有改变它,所以我认为它是默认的。 – Tricky

+0

在10.11上,默认情况下它们*出现*为644。 – mkoistinen