2011-09-19 175 views
0

我试图设立卡桑德拉本地LaunchAgent和正在运行到自bin/cassandra的问题仅仅是一个shell脚本启动:OSX LaunchAgent的应用程序,启动另一个应用程序

/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

+0

您是否尝试过与实际外壳的可执行文件,应执行预先设置shell脚本脚本,即/ bin/sh? –

+0

@tommyd - 不错的想法,但没有运气:(同样的事情 - 立即检查显示进程'/ bin/sh/path/to/bin/cassandra',但几毫秒后,进程不见了 –

回答

1

我并不特别熟悉cassandra,但我的猜测是它本身就是守护进程(即掉入后台)。发射不喜欢它的孩子们自我救赎;它希望能够继续留在能够留意它们的前景。如果守护进程本身,launchd认为它已退出(在技术上它已经退出),清除所有剩余的子进程(包括现在被守护进程)并重新启动它。泡沫,冲洗,重复。

this entry in the cassandra wiki,你可以通过卡桑德拉-f标志,使其留在前台,并保持launchd会高兴:

<key>ProgramArguments</key> 
<array> 
    <string>/opt/local/bin/cassandra</string> 
    <string>-f</string> 
</array> 
+0

接受答案,+1的解释,这是从长远来看更有帮助:) –

相关问题