自作からいくつかの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>
これは起動時に発生するはずだと思いました。何が足りないのですか?
あなたの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
コマンド。
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
Startコマンドは、引数としてジョブLabelを想定しているため、次を使用して開始します...
launchctl start com.myfile.hostname.plist
停止するには、次の手順を実行します...
launchctl stop com.myfile.hostname.plist
すべてのテストが完了したら、ログアウトしてからログインしてロードするか、plistファイルがユーザーのライブラリフォルダーにある場合は、次のように入力します...
launchctl load ~/Library/LaunchAgents/com.myfile.hostname.plist
私にとって、これまでの他の解決策は私を助けません。 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
を追加しなかったためだと思います。私は時々この行を追加するのが面倒だからです。
見出しを追加すると、すべて正常に機能します。
名前を変更してみてください。ファイル名を次のように変更します。
~/Library/LaunchAgents/com.mysql.mysqld2.plist
そして、plistのLabelセクションは次のようになります。
<key>Label</key>
<string>com.mysql.mysqld2</string>
バックアップコピーを保存する場合は、必ず〜/ Library/LaunchAgents /ディレクトリの外に移動してください。
最後に、launchctlを使用してロードする代わりに、ログアウトして再度ログインします。これにより、launchdはそれ自体を「LaunchAgents」ディレクトリから取得し、もう1つの変数(つまり、launchctl)をミックスから削除します。