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
risposta
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 &
considera il reindirizzamento di stderr e stdout come parte del comando. per esempio. 'nohup java .... 1>/dev/null 2> & 1 &' – JeremyP
È 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.
Questo è buono se si desidera eseguire periodicamente un programma. Il programma dovrebbe terminare quando viene eseguito. – KarlP
questo articolo sono contenute alcuni trucchi utili per l'esecuzione di un'applicazione Java come un demone:
http://barelyenough.org/blog/2005/03/java-daemon/
In alternativa, si può dare un'occhiata al progetto Apache Commons Daemon, anche se questo richiede codice nativo (Unix e Win32 supportato):
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)
è 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 .
Su Debian, c'è uno script pre-creato, che puoi copiare e adattare alle tue esigenze: '/ etc/init.d/skeleton' – barjak
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
- 1. Esecuzione di comandi UNIX come utente diverso, da Java
- 2. Esecuzione del processo Java come servizio in Linux
- 3. nodo di supervisione in esecuzione come servizio
- 4. Come ottenere riferimento al servizio in esecuzione?
- 5. Log4Net con WCF in esecuzione come servizio
- 6. Esecuzione di Jetty 7 come servizio Windows
- 7. - Esecuzione in background dal servizio
- 8. Come verificare se JBoss è in esecuzione sul server Unix?
- 9. Unix stat()/lstat() per Java
- 10. Esecuzione di una libreria condivisa su Unix
- 11. Controllare i processi in esecuzione - java
- 12. Converti timestamp unix alla data in java
- 13. Esecuzione di Redis su Windows come servizio
- 14. Come creare un servizio in background sempre in esecuzione?
- 15. Come rilevare se sono in esecuzione in mono-servizio?
- 16. Socket di dominio UNIX in Java
- 17. esecuzione di script o comandi con interprete in unix per unix-layman
- 18. Come ottenere tempo di attività UNIX in Java?
- 19. Eseguire l'applicazione Java come servizio
- 20. Come posso connettermi esternamente a un servizio in esecuzione su 127.0.0.1 (anziché su 0.0.0.0)?
- 21. Programma Java come servizio Windows
- 22. Evento non attivo quando è in esecuzione come servizio
- 23. Esecuzione di un comando come processo/servizio in background
- 24. Impossibile utilizzare JConsole con Tomcat in esecuzione come servizio Windows
- 25. ANR Esecuzione servizio com.example.app/com.google.android.gms.analytics.AnalyticsService
- 26. Esecuzione di Java come app Web
- 27. Converti tempo Unix in leggibile Data in Java
- 28. Esecuzione di un archivio jar in un'applicazione Java in esecuzione
- 29. Esecuzione di JavaScript all'interno di un servizio in Android
- 30. uccidere un thread in esecuzione in java?
http://commons.apache.org/daemon/jsvc.html –
Controllare in serverfault.com/superuser.com. Il sistema potrebbe saperne di più su questo (nohup, inittabs, cron ecc.) – Jayan