2013-05-29 234 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