1

ActiveMQデーモンの設定を試みましたが、これまでのところ成功していません。読み込めないようですActiveMQ。これを機能させるために他に何ができるかわかりませんか? ActiveMQコマンドを実行して開始できます/Library/ActiveMQ/bin/macosx/activemq start

plistで

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>Label</key>
    <string>com.apache.activemq</string>
    <key>ProgramArguments</key>
    <array>            
        <string>/Library/ActiveMQ/bin/macosx/activemq</string>
        <string>start</string>
        <string>;</string>
        <string>--stop-cmd</string>
        <string>/Library/ActiveMQ/bin/macosx/activemq</string>
        <string>stop</string>
        <string>;</string>
        <string>--restart-cmd</string>
        <string>/Library/ActiveMQ/bin/macosx/activemq</string>
        <string>restart</string>
        <string>;</string>
        <string>--pid=none</string>
    </array>
    <key>WorkingDirectory</key>
    <string>/Library/ActiveMQ</string>
    <key>ServiceDescription</key>
    <string>ActiveMQ</string>
    <key>StandardErrorPath</key>
    <string>/var/log/activemq.stderr</string>
    <key>StandardOutPath</key>
    <string>/var/log/activemq.stdout</string>
</dict>
</plist>

launchctlコマンド実行結果

macosx user$ sudo launchctl load -w /Library/LaunchDaemons/activemq.plist com.apache.activemq: Already loaded

4

3 に答える 3

2

.plist ファイルはいくつかの点で間違っているように見えますが、これが問題の少なくとも一部を引き起こしている可能性があります。まず、ProgramArguments には無関係ながらくたがたくさん含まれているようです (daemond の使用による残り物でしょうか?) 一般に、ProgramArguments の最初の引数は実行するプログラムへのパスであり、残りはその引数である必要があります。これがあなたが持つべきすべてのように私には見えます:

<key>ProgramArguments</key>
<array>            
    <string>/Library/ActiveMQ/bin/macosx/activemq</string>
    <string>start</string>
</array>            

第二に、その「開始」引数は、それが実際のデーモン プログラムではなく、バックグラウンドでデーモンを開始して終了する管理スクリプトであると思わせます。手動で実行/Library/ActiveMQ/bin/macosx/activemq startすると、デーモンは終了し (つまり、新しいシェル プロンプトが表示され)、デーモンはバックグラウンドで実行されたままになりますか? launchd はそれを期待していません。デーモンを直接実行していることを期待しているため、デーモンを監視したり、必要に応じて再起動したりできます。実際のデーモンではなく、起動スクリプトを実行するように launchd に指示する場合の典型的なシーケンスは次のとおりです。

  1. launchd はスターター スクリプトを実行します。
  2. スターター スクリプトはバックグラウンドでデーモンを実行し、終了します。
  3. launchd は、実行するように指示されたプログラムが終了したことを確認し、「ああ、クラッシュした! 混乱を一掃して再起動したほうがいい!」と考えます。
  4. 「混乱を一掃」しようとして、launchd は残りのバックグラウンド プロセスを強制終了します。この場合、それは実際のデーモンを強制終了することを意味します。
  5. launchd はプログラムを存続させるように指示されているため、新しいインスタンスを開始し、シーケンス全体を何度も再起動します。

...言うまでもなく、これはうまく機能しません。これまたは同様のことが起こっている場合は、それを修正するための 2 つのオプションがあります。

  • スターター スクリプトをスキップし、launchd で実際のデーモンを直接実行します。デーモンの監視、再起動、停止などを行う launchd の機能を利用できるため、これがより良い方法です。
  • スターター スクリプトを使用しますが、launchd が終了するときにパニックにならないように指示します。false に変更KeepAliveし、追加します。<key>AbandonProcessGroup</key><true/>
于 2013-08-26T22:23:59.520 に答える
1

ターミナルで以下のコマンドを実行

 sudo launchctl unload /Library/LaunchDaemons/activemq.plist

また

sudo launchctl remove com.apache.activemq

それから

sudo launchctl load -w /Library/LaunchDaemons/activemq.plist 
于 2013-08-26T09:13:38.370 に答える