讓Java程式作為linux的Daemon後台運行 和 使用Java Service Wrapper將java程式作為linux服務並且開機自動啟動

來源:互聯網
上載者:User

一、讓Java程式作為linux的Daemon後台運行

因為需要對網路環境進行監控,做了個Java程式在linux伺服器上運行。但是每次重新啟動的時候都要手動的運行,這樣就不太現實。所以想到把Java程式做成像Windows的系統服務那樣,開機就會自動在後台運行。以前使用過一個工具http://javaservice.objectweb.org/,可以把Java程式註冊成為Windows的系統服務,而且使用起來很簡單,但是遺憾的是該工具不能註冊linux的後台服務。所以不得不另外尋找工具。

   最後找到了JavaService Wrapper(http://wrapper.tanukisoftware.org/doc/english/introduction.html),該工具能在很多中平台下面註冊為系統服務(查看支援平台)。該工具使用方法有三種模式,我用的是第一種WrapperSimpleApp協助類,另外的兩種方式都需要在原來的程式上進行適當的編碼。下面就用我的程式NetWatchDog為例子說明下大概的配置步驟。(其實文檔中已經用Jboss進行了示範)

1.建立一個目錄名為NetWatchDog,並在該目錄下建立bin,lib,conf,logs目錄。以下把NetWatchDog目錄稱為$DOG_HOME。

2.把下載來的檔案解壓,把$WRAPPER_HOME/bin/wrapper,$WRAPPER_HOME/src/bin/sh.script.in檔案copy到$DOG_HOME/bin目錄中。

3.把sh.script.in檔案該名為你的服務名稱,這裡改為NetWatchDog。

4.編輯NetWatchDog,把Application的相關資訊改為如下:

APP_NAME="NetWatchDog"APP_LONG_NAME="NetWatchDog Application"

5.把你的程式的打包成jar檔案,拷貝到$DOG_HOME/lib目錄下,並把$WRAPPER_HOME/lib/libwrapper.so,$WRAPPER_HOME/lib/wrapper.jar檔案也拷貝到$DOG_HOME/lib目錄下面。

6.這步比較重要是成敗的關鍵,把$WRAPPER_HOME/conf/wrapper.conf檔案拷貝到$DOG_HOME/conf目錄下(文檔上面說的是wrapper.conf.in檔案,但是我下載來的檔案就是wrapper.conf,所以步需要改名的)。

7.編輯wrapper.conf檔案:

#java命令的位置wrapper.java.command=%JAVA_HOME%/bin/java#wrapper的主類wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp#java classpathwrapper.java.classpath.1=../lib/wrapper.jarwrapper.java.classpath.2=%JAVA_HOME%/jre/lib/ext/log4j-1.2.13.jarwrapper.java.classpath.3=%JAVA_HOME%/jre/lib/ext/activation.jarwrapper.java.classpath.4=%JAVA_HOME%/jre/lib/ext/commons-email-1.0.jarwrapper.java.classpath.5=%JAVA_HOME%/jre/lib/ext/mail.jarwrapper.java.classpath.6=../lib/NetWatchDog.jar#你的程式的主類,將作為wrapper的參數wrapper.app.parameter.1=qiya.deng.main.Main

8.這樣基本就大功告成了,現在可以運行命令./NetWatchDog  start,如果提示許可權不夠就用chmod 755 NetWatchDog命令改變許可權。如果沒出現錯誤提示,這樣基本上就正確了。

 

 

二、使用Java Service Wrapper將java程式作為linux服務並且開機自動啟動

 

 

下面在linux的/opt下建立tianlong目錄,複製tianlong.jar到/opt/tianlong/lib目錄下。 

1、下載Java Service Wrapper(目前版本wrapper-linux-x86-32-3.3.2), 解壓。 
http://wrapper.tanukisoftware.org/ 
複製src/bin/sh.script.in到/opt/tianlong/bin目錄,重新命名為QueueTest

複製wrapper/bin目錄下的wrapper檔案到/opt/tianlong/bin目錄 

複製src/conf/wrapper.conf.in到/opt/tianlong/conf目錄,重新命名為wrapper.conf 

複製src/lib/lib目錄下3個檔案到/opt/tianlong/lib目錄 

wrapper.so 
wrapper.jar 
wrappertest.jar

2、修改/opt/tianlong/bin/QueueTest檔案 
APP_NAME="QueueTest" //注意這裡,這裡的應用服務名稱應該與第1步的/opt/tianlong/bin裡面的QueueTest名字相同
APP_LONG_NAME="QueueTest Application Server" 
WRAPPER_CMD="./wrapper" //這裡的路徑要寫正確,這裡是對應了/opt/tianlong/bin/wrapper這個檔案
WRAPPER_CONF="../conf/wrapper.conf" //這裡的路徑要寫正確,這裡是對應了/opt/tianlong/conf/wrapper.conf這個檔案
賦予執行許可權 
chmod 775 /opt/testapp/bin/SocketServer 
chmod 775 /opt/testapp/bin/wrapper 

3、修改/opt/tianlong/conf/wrapper.conf檔案 
wrapper.java.command=/usr/java/jdk1.6.0_07/bin/java //這裡是寫java的安裝路徑
使用WrapperStartStopApp,這樣可以通過命令帶start/stop來啟動/停止程式。
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperStartStopApp 
#這裡添加你用到的jar包檔案,從1..n你自己全寫上吧,不過wrapper是必須的 
wrapper.java.classpath.1=../lib/wrapper.jar
wrapper.java.classpath.2=../lib/tianlong.jar //這裡表示將打包好的tianlong.jar放在/opt/tianlong/lib這個檔案夾中
wrapper.java.classpath.3=../lib/asterisk-java-0.3.jar
wrapper.java.classpath.4=../lib/mysql-connector-java-5.1.6-bin.jar
wrapper.java.classpath.5=/usr/java/jdk1.6.0_07/lib/dt.jar
wrapper.java.classpath.6=/usr/java/jdk1.6.0_07/lib/tools.jar
wrapper.java.classpath.7=../cofig.properties //這個是應用程式用到的設定檔。如果使用的應用程式需要用到配置,就需要把這個檔案包含進來
wrapper.java.library.path.1=../lib //這裡是表示wrapper使用到的jar包的路徑,一般預設即可,絕對路徑是:/opt/tianlong/lib
#這個就是你自己可執行程式的主類(MainClass),一般來說,就是包含public static void main的那個類 
wrapper.app.parameter.1=tianlong.QueueTest
wrapper.app.parameter.2=1 
wrapper.app.parameter.3=true 
wrapper.app.parameter.4=tianlong.QueueTest
wrapper.app.parameter.5=true 
wrapper.app.parameter.6=1 
wrapper.app.parameter.7=stop 

4、讓QueueTest開機自動運行 
ln -s /opt/tianlong/bin/QueueTest/etc/init.d/QueueTest
ln -s /opt/tianlong/bin/QueueTest /etc/rc0.d/QueueTest
ln -s /opt/tianlong/bin/QueueTest /etc/rc1.d/QueueTest
ln -s /opt/tianlong/bin/QueueTest /etc/rc2.d/QueueTest
ln -s /opt/tianlong/bin/QueueTest /etc/rc3.d/QueueTest
ln -s /opt/tianlong/bin/QueueTest /etc/rc4.d/QueueTest
ln -s /opt/tianlong/bin/QueueTest /etc/rc5.d/QueueTest
ln -s /opt/tianlong/bin/QueueTest /etc/rc6.d/QueueTest 

5、測試 執行命令:service QueueTest start|stop|restart|status 
程式運行時,Java Service Wrapper在/opt/tianlong/bin/目錄下產生wrapper.log日誌, 
STATUS | wrapper| 2009/02/25 17:04:01 | --> Wrapper Started as Daemon
STATUS | wrapper| 2009/02/25 17:04:01 | Java Service Wrapper Community Edition 3.3.2
STATUS | wrapper| 2009/02/25 17:04:01 | Copyright (C) 1999-2009 Tanuki Software, Ltd.All Rights Reserved.
STATUS | wrapper| 2009/02/25 17:04:01 | http://wrapper.tanukisoftware.org
STATUS | wrapper| 2009/02/25 17:04:01 | 
STATUS | wrapper| 2009/02/25 17:04:01 | Launching a JVM...
INFO | jvm 1 | 2009/02/25 17:04:02 | WrapperManager: Initializing...

出現上面這個就表示已經配置成功了。如果配置有錯誤的話,在wrapper.log裡面會有提示。
同時,如果程式配置成功的並且啟動的話,在/opt/tianlong/bin裡面會有一個QueueTest.pid。

附目錄結構
/opt/tianlong/
cofig.properties
/opt/tianlong/bin
| QueueTest
| wrapper
| wrapper.log(程式運行時自動產生)
/opt/tianlong/conf
| wrapper.conf
/opt/tianlong/lib
| libwrapper.so
| wrapper.jar
| tianlong.jar
| mysql-connector-java-5.1.6-bin.jar
| asterisk-java-0.3.jar

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.