2015-12-11 21 views
18

我希望在登錄時運行在後臺運行的同步同步服務。但是我的代理的狀態代碼是78。我不知道爲什麼,我嘗試在網上發佈一些修正,但它不起作用。啓動狀態78是什麼意思?爲什麼我的用戶代理不運行?

有什麼問題?下面是我服務的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>Label</key> 
    <string>syncmyproject</string> 
    <key>StandardOutPath</key> 
    <string>/var/log/syncmyproject.log</string> 
    <key>StandardErrorPath</key> 
    <string>/var/log/syncmyproject.log</string> 
    <key>RunAtLoad</key> 
    <true/> 
    <key>KeepAlive</key> 
    <true/> 
    <key>Debug</key> 
    <true/> 
    <key>EnableGlobbing</key> 
    <true/> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/usr/local/bin/unison</string> 
     <string>-auto</string> 
     <string>-batch</string> 
     <string>-repeat watch</string> 
     <string>~/home/project</string> 
     <string>~/project</string> 
    </array> 
</dict> 
</plist> 
+0

你可以''grep'這個文件尋找可能的線索,看看有什麼錯:'/ var/log/system.log' – Nick

回答

22

我讀man launchctl,找到78表示function not implemented。它沒有多大幫助。

最後我讓它工作,其實在plist中有錯誤,我推薦安裝brew cask install launchcontrol,它是一個用於launchctl的gui工具,它可以幫助檢測錯誤和故障排除。

+3

感謝你們。 launchcontrol幫助解決了我的問題。對於記錄我有78狀態,我的問題是我的腳本不是以解釋器e,g開始的; '#!/ bin/sh' – gooddadmike

+1

對我來說問題是,當前用戶無法訪問日誌目錄。 – d4Rk

+0

是的,我也是。我在shebang有一個錯誤。這使得難以調試,因爲腳本在執行時完美無瑕,但在launchd嘗試執行時無法執行。 – wetjosh

0

我試圖運行mono來啓動本地web服務器時出現此錯誤。原來的修復方法是不使用由「which mono」(這是一個符號鏈接:/Library/Frameworks/Mono.framework/Versions/Current/Commands/mono)給出的單聲道路徑,而是exe的實際位置(在我的例子中爲/Library/Frameworks/Mono.framework/Commands/mono)。

5

[遇到了這個問題一樣,所以記錄什麼我發現]

「78」是你正在運行的作業的最後退出代碼。從man launchctl

沒有參數時,列出加載到launchd中的所有作業在三個 列中。第一列顯示作業的PID,如果它正在運行 - ning。 第二列顯示作業的最後退出狀態。如果 這一列中的數字是負數,它表示停止作業的信號的負數 。因此,「-15」將指示 作業已用SIGTERM終止。第三欄是工作的標籤。 如果指定了[標籤],則打印有關所請求作業的信息。

I.e.您需要閱讀文檔(或源代碼)以瞭解您開始的任何工作。 (在我的情況下,mysqld)

值得注意的是,在Linux上提到「78」爲standard exit code,表示出現配置錯誤。所以看看你的工作配置(和錯誤日誌?),看看你是否有錯誤的配置。

+0

在我的情況下,我忘記了chmod + x shell腳本':) – eddyce

0

我發現錯誤與權限有關。 我是在試圖將錯誤和日誌重定向到/ var/log目錄(我的用戶無法寫入!) 將路徑更改爲我的用戶具有適當權限的地方修復了它。

加載您的LaunchAgent時要小心。如果您位於〜/ Library/LaunchAgents目錄中,請勿使用sudo加載plist。

1

以下是引起我注意的一點:在Mac OS X中,即使文件中只有「腳本」,也可以從命令行運行shell腳本。 但是,當您從launchd運行它們時,必須告訴哪個二進制文件應該運行該腳本。 假設當你從命令行運行時,它只是使用你當前使用的shell(在我的情況下是bash),但是從launchd運行時沒有「環繞腳本」。 我加

#!/bin/sh 

在腳本文件的第一行,然後它的工作。