Launchdスクリプトが機能しない理由を理解しようとしています。非常にシンプルですが、私はMac環境に慣れていないため、慣れるようにしています。これが私のリストです。 ProgramArguments
が必要であることはわかっているので、スクリプトのパスをそこに入力します。
<?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>com.Tomcat.plist</string>
<key>ProgramArguments</key>
<array>
<string>/opt/Apache-Tomcat-5.5.27/bin/startup.sh</string>
</array>
<key>OnDemand</key>
<false/>
</dict>
</plist>
launchctl load <name>
を実行しようとすると、適切にロードされているように見えますが(エラーメッセージは表示されません)、再起動してもスクリプトが実行されていないようです。
私はオンラインで見つけたすべての例を使用しましたが、これが起動時にスクリプトを実行しない理由がわかりません。
他の誰かがこの問題に遭遇し、すでに<key>RunAtLoad</key><true/>
彼らのリストで、いくつかの追加のソリューションを提供したいと思います。
権限を再確認して、スクリプトが実行可能であることを確認します(「x」を探します)。
ls -l /opt/Apache-Tomcat-5.5.27/bin/startup.sh
必要に応じて権限を変更します。
chmod +x /opt/Apache-Tomcat-5.5.27/bin/startup.sh
また、最初にスクリプトを直接実行して、それが機能することを確認します。
/opt/Apache-Tomcat-5.5.27/bin/startup.sh
スクリプトが実行可能で、直接正常に実行される場合は、システムログを調整して、launchdをデバッグしてみます。
Sudo launchctl log level debug
tail -f /var/log/system.log
-f
フラグは(基本的に)ログの最後(最新のエントリ)を継続的に表示します。このフラグを削除して、ログの最後のスナップショットを出力することができます。このフラグを使用する場合、他のコマンドを実行するには新しいターミナルを開く必要があります。 CTRL + Cを押して、テールセッションを終了します。詳細については:
man tail
デバッグが終了したら:
Sudo launchctl log level error
他のログレベルがあります。詳細については:
man launchctl
スクリプトまたはplistに変更を加えた場合は、plistをリロードしてください。例えば:
launchctl unload ~/Library/LaunchAgents/com.Tomcat.plist
launchctl load ~/Library/LaunchAgents/com.Tomcat.plist
Plistではなくスクリプトのみを変更した場合は、plistを再起動するだけです。
launchctl stop com.Tomcat.plist
launchctl start com.Tomcat.plist
次のKey-Valueをplistに追加すると、
<key>KeepAlive</key>
<true/>
それからあなたはただ走ることができます:
launchctl stop com.Tomcat.plist
そして、自動的に再起動します。
これで解決しない場合、およびOS XでのTomcatの設定に特に問題がある場合は、 このチュートリアル が役立つ可能性があります。
Launchctl loadを呼び出したときにスクリプトが自動的に実行されるようにするには、以下を追加する必要があります。
<key>RunAtLoad</key>
<true/>
または、次のように使用することもできます。
launchctl start com.Tomcat.plist
ほとんどの人がこの問題を抱えることはないと思いますが、launchd load
終了コードが返されたにもかかわらず0
が機能しない理由を解明するために2時間近く費やしたので、ここに置く価値があると思います。
問題は簡単でした。私のplist
ファイルには間違ったファイル拡張子があり( "plst
"がありました)、launchctl
は静かにファイルのロードを拒否していました。拡張子をplist
に変更すると、問題が解決しました。