最近有個任務,需要遠程起調Windows64服務器下的程序,那麼需要在Windows服務器中注入一個deamon服務,都知道Linux環境做成後台服務非常簡單,nohup &很快能解決問題,但Windows環境總是多重磨難。
一開始我先問了個朋友,他回答是沒做成服務,是把寫個Pathon包在Java外面,然後編譯成exe,在啟動中加入,我一聽覺得有些麻煩,還需要繞一圈才能起調。
先搜Java Windows service, 推薦首選Wrapper,並且大名鼎鼎的ActiveMQ也是用的他做的服務,經過驗證,配置很簡單,copy wrapper.exe, wrapper.dll, wrapper.jar到自己的目錄,並配置一個wrapper.conf, 測試。
- wrapper.exe -c wrapper.conf
發現有問題,需要一個licence key,需要購買。
也許還有方法去破解,不過看了一個老外說wrapper對Windows64位並不免費,並推薦Procrun之後,決定轉到這一陣地,加上大名鼎鼎的Tomcat也是用它做的服務。整個配置如下:
1.下載prunsrv
http://archive.apache.org/dist/commons/daemon/binarIEs/Windows/
下載commons-daemon-1.0.8-bin-Windows.zip
網上找這個不容易,後來才在commons-daemon-1.0.8-bin-Windows.zip裡面找到這個,一般會找到http://commons.apache.org/daemon/download_daemon.CGI,這裡面並沒有prunsrv.exe
解包後,64位機器用amd64/prunsrv.exe
2.解壓後復制文件
a. copy commons-daemon-1.0.8-bin-Windows/amd64/prunsrv.exe to your app path
這是做服務的執行程序
b. copy commons-daemon-1.0.8-bin-Windows/prunmgr.exe 並改名 yourappname.exe
監控服務配置及運行的程序
3.寫兩個腳本
a.一個安裝bat
- @echo off
- set LIB_HOME=******
- set APP_HOME=******
- %APP_HOME%\prunsrv.exe //IS//StartService --DisplayName="Start Service" --Description="Start a server." ^
- --Install=%APP_HOME%\prunsrv.exe --Jvm=%Java_HOME%\jre\bin\server\jvm.dll --JvmMs=256 --JvmMx=1024 ^
- --StartMode=jvm --Startup=auto --StopMode=jvm --StartClass= --StartParams= ^
- --Classpath=%LIB_HOME%\*.jar; ^
- --LogPath= --LogPrefix=
^是Windows命令的折行符,為了避免在一行中寫過長的命令。(Linux 是\)
在DOS環境下執行這個腳本,執行後
這樣可以在控制面板-->管理工具-->服務裡面可以看到名稱為StartService的服務
注意:--install=後面不要省%APP_HOME%\,不然會報告文件找不到
b.寫一個uninstall腳本
- @echo off
- set APP_HOME=******
- %APP_HOME%\prunsrv.exe //DS//StartService
這個可以卸掉install的服務
c.更詳細的配置文檔可以看apache文檔
http://commons.apache.org/daemon/procrun.Html