2010-10-13 47 views
18

我已經使用Java一點守護,我想運行它的Unix(例如Debian的5)下的服務。我已經讀過使用Java包裝器的可能性,但沒有其他更容易實現的選項嗎?我不能只使用一個Unix命令,如xxx java -jar program.jar的Java運行在Unix服務

+0

http://commons.apache.org/daemon/jsvc.html – 2010-10-13 10:22:00

+0

檢查serverfault.com/superuser.com。系統可能會知道更多關於此(nohup,inittabs,cron等) – Jayan 2010-10-13 17:08:09

回答

29

好吧,如果你想甚至可以運行Java程序,當你退出你的shell了,下面是最簡單的辦法:

$nohup java -jar program.jar & 
+10

考慮將stderr和stdout重定向爲命令的一部分。例如'nohup java .... 1>/dev/null 2>&1&' – JeremyP 2010-10-13 16:12:04

1

您可以使用cron作業調度程序。您還可以查看this文章,瞭解如何在啓動時運行腳本的詳細信息。您可以編寫一個腳本來運行您的Java程序,並在本文中提到的啓動時運行它。

+0

這是很好,如果你想定期運行一個程序。程序應該在完成後終止。 – KarlP 2010-10-13 11:38:15

4

你可以啓動它:

java -jar program.jar 

Unix守護進程通常由init啓動或由/etc/init.d/etc/rc.d中的腳本啓動,並在特定運行級別啓動 - 通常由/etc/rcX.d中的軟鏈接啓動。 (其中X是預期的「運行級別」,通常是3.

我認爲debian正在轉向使用「upstart」,一個init-replacement。它使用/etc/init中的配置文件來定義作業,而且它們很容易

守護進程傳統上會關閉stdin,sdtout和stderr,並在啓動時執行「雙叉」操作,以便從會話中分離出來並表示他們已準備好處理他們應該處理的任何事情這是不是真的有必要,只要守護程序不是從終端開始

如果你想要一個簡單的外殼包裝,開始你的程序。你只需要編寫一個小外殼S CRIPT:

#!/bin/sh 
/full/path/to/java -jar /full/path/to/program.jar 

...並使其運行(chmod 755)

10

您需要/etc/init.d創建一個合適的腳本,並將其鏈接到/etc/rcX.d目錄。該腳本應至少支持startstop,並status參數。在啓動過程中它應該運行使用相應的參數java命令,可能通過nohup java <arguments> &。那麼你應該保存你新啓動的進程的PID文件/var/run/yourservice.pidstop命令應讀取此PID文件並殺死此服務。 細節因分發而異,大多數發行版都提供了一些宏,使整個工作變得更簡單。最好查看/etc/init.d中其他服務的示例以供分發。

此外: 如果您的服務沒有從其他計算機從網絡訪問,但會打開某個端口,使其不可用於防火牆。

如果您的服務處理一些「微妙」數據,最好添加另一個用戶並在您的/etc/init.d文件中調用適當的sudo命令。

+0

在Debian上,有一個預製腳本,您可以複製並適應您的需求:'/ etc/init.d/skeleton' – barjak 2010-10-13 11:25:41

+0

在Linux計算機上有一個實用程序命令'chkconfig',它通過檢查腳本中的特殊格式註釋爲您創建'/ etc/rcX'目錄中的鏈接。 – Raedwald 2013-11-26 21:10:29