2013-01-20 72 views
4

我試圖使用Apache Commons守護程序守護程序使用Daemon接口。它自己的Java應用程序沒有做任何事情,只是寫入黑體。使用JSVC守護java應用程序

我編的jsvc:http://people.apache.org/~mturk/daemon-1.0.10/

(甚至試圖最新版本:http://people.apache.org/~mturk/daemon-1.0.12/

,並寫了這個基本的腳本。

do_exec() 
{ 
    $EXEC \ 
     -home "$JAVA_HOME" \ 
     -cp $CLASS_PATH \ 
     -outfile $LOG_OUT \ 
     -errfile $LOG_ERR \ 
     -pidfile $PID \ 
     $1 \ 
     $MAIN_CLASS 
    echo "result: $?" 
} 

case "$1" in 
    start) 
      do_exec 
      ;; 
    stop) 
      do_exec "-stop" 
      ;; 
    restart) 
      do_exec "-stop" 
      do_exec 
      ;; 
    *) 
      echo "usage: daemon {start|stop|restart}" >&2 
      exit 3 
      ;; 
esac 

現在,當我試圖停止守護進程時,它沒有運行我會得到響應碼255 THAS太棒了。

但是當我嘗試啓動時,它已經在運行,我得到響應碼0。但在我ERRFILE我找出守護:

Still running according to PID file /tmp/deamon.pid, PID is 1799 
Service exit with a return value of 122 
當我嘗試在開始拋出異常

同樣的事情()方法,並嘗試啓動守護進程,響應代碼爲0.但errfile:

Service exit with a return value of 5 

我在這裏失蹤了什麼?我怎麼能告訴用戶stat deamon沒有啓動或者它已經在運行?

+0

這個腳本是一個windows批處理文件,是嗎? – Coffee

回答

4

後仔細閱讀JSVC是如何工作的:http://commons.apache.org/daemon/jsvc.html

我發現我在做什麼錯了,我必須使用等待參數

在使用-wait參數,啓動進程等待,直到控制器顯示「我準備好了」,否則在創建控制器進程後返回。

+1

確保您的start()方法在等待時間到期之前完成。否則,您將得到退出碼1而不是0。 –