2010-10-13 9 views
18

Ho creato un piccolo daemon in Java e vorrei eseguirlo come servizio sotto Unix (ad es. Debian 5). Ho letto che esiste la possibilità di utilizzare un wrapper Java, ma non esiste un'altra opzione più facile da implementare? Non posso semplicemente usare un comando Unix come xxx java -jar program.jar?Java in esecuzione come servizio Unix

+0

http://commons.apache.org/daemon/jsvc.html –

+0

Controllare in serverfault.com/superuser.com. Il sistema potrebbe saperne di più su questo (nohup, inittabs, cron ecc.) – Jayan

risposta

29

Beh, se si desidera eseguire il programma Java anche quando si esce fuori dal guscio, il seguente è il modo più semplice :

$nohup java -jar program.jar & 
+10

considera il reindirizzamento di stderr e stdout come parte del comando. per esempio. 'nohup java .... 1>/dev/null 2> & 1 &' – JeremyP

1

È possibile utilizzare un cron job per pianificare il programma. Puoi anche dare un'occhiata all'articolo this per i dettagli su come eseguire gli script all'avvio. Puoi scrivere uno script che esegue il tuo programma java ed eseguirlo all'avvio come menzionato nell'articolo.

+0

Questo è buono se si desidera eseguire periodicamente un programma. Il programma dovrebbe terminare quando viene eseguito. – KarlP

4

si può iniziare come:

java -jar program.jar 

demoni Unix sono normalmente iniziate da init o avviati da uno script in /etc/init.d o /etc/rc.d, e ha iniziato a runlevel specifici - normalmente di soft link in /etc/rcX.d. (dove X è il "runlevel" che è normalmente 3.

Credo che Debian stia passando ad usare "upstart", una init-replacement, che usa i file di configurazione in /etc/init per definire i lavori, e sono abbastanza facili da scrivi.

I daemon chiudono tradizionalmente stdin, sdtout e stderr, e fa una "doppia forchetta" all'avvio, per staccare dalla sessione e anche per segnalare che sono pronti a gestire qualsiasi cosa debbano gestire Questo non è realmente necessario, purché il daemon non sia avviato dal terminale

Se si desidera un semplice shell wrapper per avviare il programma, è sufficiente scrivere una piccola shell s cripta:

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

... e renderlo eseguibile (chmod 755)

10

è necessario creare uno script appropriato in /etc/init.d e collegarlo a /etc/rcX.d directory. Lo script deve supportare almeno i parametri start, stop e status. Durante l'avvio dovrebbe essere eseguito il comando java con gli argomenti appropriati, probabilmente tramite nohup java <arguments> &. Quindi è necessario salvare il PID del processo appena avviato sul file /var/run/yourservice.pid. Il comando stop dovrebbe leggere questo file PID e uccidere questo servizio. I dettagli variano da distribuzione a distribuzione, la maggior parte delle distribuzioni fornisce alcune macro per semplificare l'intero lavoro. È meglio guardare esempi di altri servizi in /etc/init.d per la tua distribuzione.

In aggiunta: Se al servizio non si accede da altri computer dalla rete, ma apre alcune porte, renderlo non disponibile con il firewall.

Se il servizio elabora alcuni dati "delicati", è opportuno aggiungere un altro utente e richiamare un comando sudo appropriato nel file .

+0

Su Debian, c'è uno script pre-creato, che puoi copiare e adattare alle tue esigenze: '/ etc/init.d/skeleton' – barjak

+0

Sui computer Linux è presente un comando di utilità, 'chkconfig', che crea i collegamenti nelle directory'/etc/rcX' esaminando i commenti di formato speciale nel proprio script. – Raedwald

Problemi correlati