web-dev-qa-db-ja.com

非常に単純なLaunchd plistがスクリプトを実行しない

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>を実行しようとすると、適切にロードされているように見えますが(エラーメッセージは表示されません)、再起動してもスクリプトが実行されていないようです。

私はオンラインで見つけたすべての例を使用しましたが、これが起動時にスクリプトを実行しない理由がわかりません。

30
Oliver

他の誰かがこの問題に遭遇し、すでに<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の設定に特に問題がある場合は、 このチュートリアル が役立つ可能性があります。

43
Aaron Mahan

Launchctl loadを呼び出したときにスクリプトが自動的に実行されるようにするには、以下を追加する必要があります。

<key>RunAtLoad</key>
<true/>

または、次のように使用することもできます。

launchctl start com.Tomcat.plist
13
James Mead

ほとんどの人がこの問題を抱えることはないと思いますが、launchd load終了コードが返されたにもかかわらず0が機能しない理由を解明するために2時間近く費やしたので、ここに置く価値があると思います。

問題は簡単でした。私のplistファイルには間違ったファイル拡張子があり( "plst"がありました)、launchctlは静かにファイルのロードを拒否していました。拡張子をplistに変更すると、問題が解決しました。

1
fakedad