2011-09-19 199 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的解釋,這是從長遠來看更有幫助:) –

相關問題