2012-03-13 72 views
1

我有應用程序,我想在OSX上運行LaunchDaemon。我的plist看起來像這樣:啓動plist服務不關閉

<?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>KeepAlive</key> 
    <false/> 
    <key>Label</key> 
    <string>my.service</string> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/servertest/MyService</string> 
     <string>-jvm</string> 
     <string>server</string> 
     <string>-nodetach</string>  
     <string>-outfile</string> 
     <string>out.txt</string> 
     <string>-errfile</string> 
     <string>err.txt</string> 
     <string>-verbose</string> 
     <string>-debug</string> 
     <string>-home</string> 
     <string>/System/Library/Frameworks/JavaVM.framework/Home</string> 
     <string>-cp</string> 
     <string>./lib/hsqldb.jar:./lib/myservice-wrapper.jar:./lib/commons-daemon-1.0.8.jar</string> 
     <string>my.service.DaemonMac</string> 
    </array> 
    <key>RunAtLoad</key> 
    <true/> 
    <key>StandardErrorPath</key> 
    <string>/servertest/stderr.log</string> 
    <key>StandardOutPath</key> 
    <string>/servertest/stdout.log</string> 
    <key>WorkingDirectory</key> 
    <string>/servertest</string> 
</dict> 
</plist> 

服務在加載時啓動或者當我調用'launchctl start my.service'時啓動。 但是當我使用'launchctl stop my.service'或甚至卸載plist時,它不會關閉。它仍然留在記憶中,並像沒有任何事情一樣運行。不知道可能是什麼原因。請幫忙!

回答

1

對我有效的文件如下。我瞭解到,我的deamon一定不能脫離控制過程,它必須是「OnDemand」,所以我可以在需要時停止它。我在製作薩滿舞的同時做了一些舞蹈,儘管我不清楚它在哪一點開始工作。現在確實如此。

<?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>KeepAlive</key> 
    <false/> 
    <key>Label</key> 
    <string>myserver</string> 
    <key>OnDemand</key> 
    <true/> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/opt/MYServer/MYServer</string> 
     <string>-server</string> 
     <string>-outfile</string> 
     <string>/opt/MYServer/out.txt</string> 
     <string>-errfile</string> 
     <string>/opt/MYServer/err.txt</string> 
     <string>-verbose</string> 
     <string>-debug</string> 
     <string>-nodetach</string> 
     <string>-home</string> 
     <string>/System/Library/Frameworks/JavaVM.framework/Home</string> 
     <string>-cp</string> 
     <string>/opt/MYServer/lib/hsqldb.jar:/opt/MYServer/lib/my-wrapper.jar:/opt/MYServer/lib/commons-daemon-1.0.8.jar</string> 
     <string>my.service.DaemonMac</string> 
    </array> 
    <key>RunAtLoad</key> 
    <true/> 
    <key>StandardErrorPath</key> 
    <string>/opt/MYServer/stderr.log</string> 
    <key>StandardOutPath</key> 
    <string>/opt/MYServer/stdout.log</string> 
    <key>WorkingDirectory</key> 
    <string>/opt/MYServer</string> 
</dict> 
</plist> 
1

您的應用程序是否自我守護(即放入後臺)?如果是這樣,它基本上從launchd中脫離出來,從而阻止launchd管理它。

編輯:如果應用程序不是守護進程本身,接下來要看看launchd認爲正在發生什麼launchctl list my.service。這應該轉儲守護程序的屬性列表,包括它的PID(如果launchd認爲它正在運行)和LastExitStatus(它是否在上次運行時成功退出)。 PID是否對應於實際運行過程?試圖停止服務時結果是否發生變化(尤其是PID是否更改爲0)?進程列表(例如ps -axj)是否顯示在父進程退出後生活的任何子進程?

哦,只是爲了確保:管理LaunchDaemons時,你需要使用sudo launchctl(不須藤,launchctl會嘗試將用戶會話中管理LaunchAgents)。

+0

plist中的MyService'被重命名爲jsvc可執行文件。 我的應用程序是在Java中,所以我不得不使用它。在jsvc命令行開關中有一個選項'-nodetach',如果我不使用它,我甚至不能啓動服務。 – 2012-03-13 16:18:46

+0

現在我正在處理另一項任務,但稍後會返回。感謝您的迴應。 – 2012-03-22 10:08:41

相關問題