32

自作から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>

これは起動時に発生するはずだと思いました。私は何が欠けていますか?

4

6 に答える 6

40

あなたの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コマンドに対してより適切に機能する可能性があります。

于 2015-04-28T17:49:14.160 に答える
1

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
于 2011-07-31T03:42:11.383 に答える
0

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

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

および plist の Label セクションを次のようにします。

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

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

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

于 2011-07-31T12:52:51.057 に答える
0

OSX Yosemite 10.10 以降launchctl、コマンドが変更されました。

でサービスを自動的に開始するには、次のコマンドが必要ですreboot

sudo launchctl bootstrap system /Library/LaunchDaemons/${YOUR_SERVICE_NAME}.plist
sudo launchctl enable system/${YOUR_SERVICE_NAME}
sudo launchctl kickstart -kp system/${YOUR_SERVICE_NAME}

注: ユーザー root でサービスを起動し、システム全体で起動します。

参考文献:Launchctl Man Page( https://ss64.com/osx/launchctl.html )

于 2021-11-25T05:37:55.513 に答える