0

私はcassandraのローカルLaunchAgentをセットアップしようとしていbin/cassandraますが、起動するシェルスクリプトであるため、問題が発生しています。

/usr/bin/java -ea -javaagent:blah blah blah blah blah blah blah

LaunchAgentはスクリプトを起動しますが、cassandraを起動しないか、サブプロセスの生成を許可しません。または、何が起こっているのか完全にはわかりませんが、以前にこの問題が発生したようです。これを機能させるために私が知っている唯一の方法は、LaunchAgentを次の場所から変更することです。

<?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.cassandra.agent</string>

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

    <key>KeepAlive</key>
    <true/>

    <key>UserName</key>
    <string>root</string>

    <key>ProgramArguments</key>
    <array>
        <string>/path/to/cassandra/bin/cassandra</string>
    </array>

    <key>WorkingDirectory</key>
    <string>/path/to/cassandra/bin</string>
</dict>
</plist>

に...

...
<key>ProgramArguments</key>
<array>
    <string>/usr/bin/java</string>
    <string>-ea</string>
    <string>-javaagent:blah</string>
    <string>blah</string>
    <string>blah</string>
    <string>blah</string>
    <string>blah</string>
    <string>blah</string>
    <string>blah</string>
</array>

すべての引数をプルする代わりに、LaunchAgentからシェルスクリプトを参照する方法を誰かが知っているかどうか疑問に思っています。ps aux

4

1 に答える 1

1

私はcassandraに特に精通していませんが、それ自体がデーモン化されている(つまり、バックグラウンドにドロップしている)と思います。launchdは、その子が自分自身をデーモン化することを好みません。その後、フォアグラウンドに留まり、監視できるようになることを期待しています。自分自身をデーモン化すると、launchdはそれが終了したと見なし(技術的には終了しました)、残っているサブプロセス(現在デーモン化されているプロセスを含む)をクリーンアップして再起動します。泡立てて、すすぎ、繰り返します。

cassandra wikiのこのエントリによると、 cassandraにフラグを渡し-fてフォアグラウンドにとどめ、起動を幸せに保つことができます。

<key>ProgramArguments</key>
<array>
    <string>/opt/local/bin/cassandra</string>
    <string>-f</string>
</array>
于 2011-09-19T23:16:31.663 に答える