2014-07-23 30 views
2

我一直試圖讓我的Java應用程序在啓動後在後臺運行,作爲後臺進程。我已按照頂部答案here中的說明進行操作,但無濟於事。在/etc/init.d啓動的Unix腳本不工作

這是我/etc/init.d/myapp文件:

#!/bin/bash 
# MyApp 
# 
# description: bla bla 

case $1 in 
    start) 
     /bin/bash /var/lib/myapp/start.sh 
    ;; 
    stop) 
     /bin/bash /var/lib/myapp/stop.sh 
    ;; 
    restart) 
     /bin/bash /var/lib/myapp/stop.sh 
     /bin/bash /var/lib/myapp/start.sh 
    ;; 
esac 
exit 0 

作爲/var/lib/myapp/start.sh,它看起來像這樣:

#!/bin/bash 
java -jar myapp-1.0.0RC.jar & 

並通過ssh從終端運行時工作正常。

我也跑了update-rc.d myscript defaults命令,只給出一個大概頭警告,LSB

在此之後,一旦重新啓動服務器,應用程序運行未啓用。任何幫助表示讚賞。

謝謝。

+0

是所有腳本(init腳本,start.sh和stop.sh)可執行文件?手動運行'/etc/init.d/myapp start'時會發生什麼? –

+0

@ArewrewStubbs所有的文件都被賦予了777 ...運行myapp start手動給出「無法訪問jarfile ....」這似乎是問題,但是,該jar與start.sh相同的文件夾中 – OsaSoft

+0

@ AndrewStubbs啊,我們走了......我現在看到了,所以即使我運行與jar文件位於同一文件夾中的腳本,主路徑也保持不變。在運行start.sh之前,將/ var/lib/myapp添加到/etc/init.d/myapp文件中並沒有什麼用。謝謝 – OsaSoft

回答

2

運行bash腳本時,它們不會自動從包含它們的相同目錄運行。

你要麼需要更新腳本,以更改目錄到其開始罐子之前持有的腳本:

#!/bin/bash 
cd /var/lib/myapp/ 
java -jar myapp-1.0.0RC.jar & 

或者,請參閱jar文件以全路徑:

#!/bin/bash 
java -jar /var/lib/myapp/myapp-1.0.0RC.jar & 
+0

這個技巧。看到我需要Java應用程序訪問某些具有相對路徑的文件,使用cd更改目錄最適合我的解決方案。感謝隊友 – OsaSoft

+0

嗯...顯然即使我可以手動運行/etc/init.d/myapp啓動,重啓後它仍然沒有運行... – OsaSoft

+2

您可能還需要java可執行文件的完整路徑 – Gus

0

檢查您的服務通過chkconfig的

$ chkconfig --list 

正確註冊如果沒有你可以看到在輸出中列出你的服務,然後再嘗試加入這一行到你的腳本

#!/bin/bash 
# chkconfig: 2345 95 20 
# description: bla bla 
# processname: myapp 

,然後運行

chkconfig --add myapp 

欲瞭解更多信息,你可以檢查手冊頁chkconfig