2015-12-11 23 views
18

私がログインするたびにバックグラウンドで実行されているユニゾン同期サービスを実行したい。しかし、エージェントのステータスコードは78です。私はなぜ、私はいくつかの修正プログラムをオンラインで投稿しようとしたが、それは動作しませんわからない。ステータス78のlaunchdは何ですか?なぜ私のユーザーエージェントが実行されていないのですか?

何が問題ですか?以下は私のサービスの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

「/ var/log/system.log」というファイルにgrepすることができます。 – Nick

答えて

22

私は78の手段function not implementedを見つけ、man launchctlをお読みください。それはあまり役に立たない。

最後に、実際にはplistにエラーがありました。私はlaunchctl用のguiツールであるをインストールすることをお勧めします。エラーやトラブルシューティングの検出に役立ちます。

+3

ありがとうございます。 launchcontrolは私の問題を解決するのに役立ちました。記録のために私はステータス78だったし、私の問題は私のスクリプトが通訳eで始まらなかったことだった。 '#!/ bin/sh' – gooddadmike

+1

私の問題は、現在のユーザがログディレクトリにアクセスできないという問題でした。 – d4Rk

+0

うん、私も。私はシバンに間違いがあった。これは、実行時にスクリプトが完璧に実行されたため、launchdが実行しようとしたときには実行されなかったため、デバッグは困難でした。私の場合、 – wetjosh

0

monoを実行してローカルWebサーバーを起動しようとしているときにこのエラーが発生しました。この修正は、「どのモノ」(シンボリックリンク:/Library/Frameworks/Mono.framework/Versions/Current/Commands/mono)であるが、exeの実際の場所(私の場合は/Library/Frameworks/Mono.framework/Commands/mono)によって与えられるモノラルパスを使用しないようにした。

5

は「78」は、あなたが実行しているジョブの最後の終了コードである[ので、私が見つけたものを文書化し、同様にこの問題に遭遇しました]。 man launchctlから:

引数なしで、3つの 列にはlaunchdにロードされたすべてのジョブを一覧表示します。最初の列には、実行されているジョブのPIDが表示されます。 ning。 2番目の列には、ジョブの最後の終了ステータスが表示されます。 この列の数値が負の場合は、ジョブを停止した信号の負数が であることを表します。したがって、「-15」は、 ジョブがSIGTERMで終了したことを示します。 3番目の列はジョブのラベルです。 [label]を指定すると、要求されたジョブに関する情報が出力されます。

e.e.e.開始しているジョブのドキュメント(またはソースコード)を読む必要があります。 (私の場合、mysqld)

"78"はLinux上でstandard exit codeとして言及されていますが、これは設定エラーを示しています。だからあなたの仕事の構成(とエラーログ?)を見て、何かが誤って構成されているかどうかを確認してください。

+0

私はchmod + xシェルスクリプトを忘れていた ':) – eddyce

0

エラーが権限と関係していることがわかりました。 私はエラーとログを/ var/logディレクトリにリダイレクトしようとしていましたが、私のユーザはそれを修正しました。 私のユーザが適切な権限を持っていた場所にパスを変更しました。

LaunchAgentを読み込むときは注意してください。 〜/ Library/LaunchAgentsディレクトリにいる場合は、sudoを使用してplistをロードしないでください。

1

Mac OS Xでは、ファイルに「スクリプトだけ」があってもコマンドラインからシェルスクリプトを実行できます。 しかし、launchdからそれらを実行するときは、スクリプトを実行するバイナリを指定する必要があります。 コマンドラインから実行すると、現在のシェル(私の場合はbash)が使用されますが、launchdから実行すると「周囲のスクリプト」は存在しないとします。 スクリプトファイルの最初の行に

#!/bin/sh 

を追加して機能させました。

関連する問題