Launchctlを使用して、構成plistファイルがサービスとして読み込まれないのはなぜですか?
私はOSX Yosemiteを実行していて、launchctlの使用に関するこの優れたチュートリアルを読みました http://nathangrigg.net/2012/07/schedule-jobs-using-launchd/
私はサービスの構成を使用して正しい.plistファイルを作成しました(これは数年前に作成した作業用plist構成ファイルのほぼ完全なコピーであるため、これは正しいことを知っています)。入力します
launchctl load ~/Library/LaunchAgents/com.Apple.myservice.plist
それに反応する
~/Library/LaunchAgents/com.Apple.myservice.plist: File exists
それはひどく説明的ではありませんが、私は行き、タイプします
launchctl start com.Apple.myservice
出力はなく、何も起こりません。私も使用しようとしました
launchctl enable ~/Library/LaunchAgents/com.Apple.myservice.plist
そして私はちょうど得ます
Usage: launchctl enable <service-target>
に応じて。
誰かが、OSX Yosemiteでlaunchdサービスをロードするための正しい構文で返信できますか?
launchd
は「奇妙な」状態に簡単に移行できます。
load
は、構成ファイルをread読み取り、schedule打ち上げ。unload
はstop
を意味しますおよび構成ファイルのスケジュールを解除しますstart
はサービスを開始します(スケジュールは無視します)stop
はサービスを停止します(ここでも、スケジュールは無視されます)一般に、「再起動」する場合は、次のように構成をアンロードして再ロードします。
launchctl unload -w ~/Library/LaunchAgents/com.Apple.myservice.plist
launchctl load -w ~/Library/LaunchAgents/com.Apple.myservice.plist
-w
は「書き込み」を意味します。これは、変更が再起動に影響することを意味します(すべてのログインまたはブートをロードします...またはログインまたはブート時に二度とロードしません)。
システムレベルのサービスの場合(/Library/LaunchDaemons
または/Library/LaunchAgents
Sudo
を使用して実行する必要がある場合があります(誤ってSudoを使用せずに実行した場合は、Sudoを使用せずにアンロードしてから、Sudoを使用して再ロードする必要があります)。
start
をload
にさせるファイル内のキーはRunAtLoad
です(そして、何らかの理由で死んだ場合でもKeepAlive
は実行を続けます)。
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
Launchctl自体からデバッグロギングを取得するのは難しい場合がありますが、キーStandardErrorPath
およびStandardOutPath
は、情報の欠落または不良(展開されていない環境変数または書き込み不可のパスなど)。指定するパスが、プロセスを実行しているユーザーによって書き込み可能であることを確認してください。
<key>StandardErrorPath</key>
<string>/tmp/appname-error.log</string>
<key>StandardOutPath</key>
<string>/tmp/appname-info.log</string>
デバッグが非常に難しいため、 LaunchControl または launched を使用して、それを launchd.info の正常な読み取りと混合することをお勧めします。
また、ここにはいくつかのデバッグのヒントがあります: https://serverfault.com/questions/183589/how-do-i-activate-launchd-logging-on-os-x
私自身はまだ試していませんが、このソリューションは最も簡単に見えます。
Sudo launchctl log level debug
tail -f /var/log/system.log
今日も同様の問題に遭遇しました。
サービスをアンロードして再度ロードするだけで、File exists
問題。
Plistファイルを更新するたびに、そうしなければならないようです。