web-dev-qa-db-ja.com

起動時に実行されないLaunchedスクリプトをデバッグするにはどうすればよいですか?

自作からいくつかのLaunchedスクリプトがあります。ただし、コンピューターを再起動するときに手動で実行する必要があります。

launchctl load -w ~/Library/LaunchAgents/com.mysql.mysqld.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>KeepAlive</key>
  <true/>
  <key>Label</key>
  <string>com.mysql.mysqld</string>
  <key>Program</key>
  <string>/Users/dash/.local/Cellar/mysql/5.1.49/bin/mysqld_safe</string>
  <key>RunAtLoad</key>
  <true/>
  <key>UserName</key>
  <string>dash</string>
  <key>WorkingDirectory</key>
  <string>/Users/dash/.local/var</string>
</dict>
</plist>

これは起動時に発生するはずだと思いました。何が足りないのですか?

21
dd.

あなたのplistで私がデバッグするのに見つけた最良の方法:

<key>StandardErrorPath</key>
<string>/tmp/mycommand.err</string>
<key>StandardOutPath</key>
<string>/tmp/mycommand.out</string>

コンソールアプリを開きます。[すべてのメッセージ]に、アプリが失敗または成功したときにエントリが表示されます。このような:

4/28/15 10:43:19.938 AM com.Apple.xpc.launchd[1]: (mycommand[18704]) Service exited with abnormal code: 1

私が抱えていたProgramArgumentsの問題は、コマンドの各項目を<string>配列内のアイテム。

編集:私の場合、シェルスクリプトの単純なラッパーの生成はさらにうまく機能しました。このスクリプトは、シェルスクリプトをOS Xの「アプリ」にするための基本的なフォルダー構造を設定します- https://Gist.github.com/mathiasbynens/674099 。これはあなたのmysql -u arg1コマンド。

30
bgs

1つの可能性:ディレクトリを調べます。

/private/var/db/launchd.db/

そして、ユーザーの「com.Apple.launchd.peruser。###」ファイルを微調整します。それを開いて、次のようなエントリがあるかどうかを確認します。

<key>com.mysql.mysqld.plist</key>
<dict>
    <key>Disabled</key>
    <true/>
</dict>

その場合は、<false/>に設定してみてください。同じことを探す別のファイルは次のとおりです。

/private/var/db/launchd.db/com.Apple.launchd/overrides.plist
2
Alan W. Smith

Startコマンドは、引数としてジョブLabelを想定しているため、次を使用して開始します...

launchctl start com.myfile.hostname.plist

停止するには、次の手順を実行します...

launchctl stop com.myfile.hostname.plist

すべてのテストが完了したら、ログアウトしてからログインしてロードするか、plistファイルがユーザーのライブラリフォルダーにある場合は、次のように入力します...

launchctl load ~/Library/LaunchAgents/com.myfile.hostname.plist
1
Adam

私にとって、これまでの他の解決策は私を助けません。 plistファイルが正しく、スクリプトがターミナルで単独で正常に実行されているため、私の問題をデバッグするのは少し難しいです。すべてが正常に見えますが、機能しません。

を実行してログファイルを確認しました

tail -f /var/log/system.log

次に、コマンドを使用してサービスを再度アンロードおよびロードします。

launchctl unload ~/Library/LaunchAgents/example.plist
launchctl load ~/Library/LaunchAgents/example.plist

ログファイルからエラーメッセージが見つかりました:

Program specified by service is not a Mach-O executable file.

それは本当にどういう意味ですか?私はグーグルしませんでした。しかし、シェルスクリプトの最初に#!/bin/bashを追加しなかったためだと思います。私は時々この行を追加するのが面倒だからです。

見出しを追加すると、すべて正常に機能します。

0
sgon00

名前を変更してみてください。ファイル名を次のように変更します。

~/Library/LaunchAgents/com.mysql.mysqld2.plist

そして、plistのLabelセクションは次のようになります。

<key>Label</key>
<string>com.mysql.mysqld2</string>

バックアップコピーを保存する場合は、必ず〜/ Library/LaunchAgents /ディレクトリの外に移動してください。

最後に、launchctlを使用してロードする代わりに、ログアウトして再度ログインします。これにより、launchdはそれ自体を「LaunchAgents」ディレクトリから取得し、もう1つの変数(つまり、launchctl)をミックスから削除します。

0
Alan W. Smith