2010-10-13 705 views
18

He creado un pequeño daemon en Java y me gustaría ejecutarlo como un servicio bajo Unix (por ejemplo, Debian 5). He leído que existe la posibilidad de usar un envoltorio Java, pero ¿no hay otra opción que sea más fácil de implementar? ¿No puedo simplemente usar un comando de Unix como xxx java -jar program.jar?Java ejecutándose como un servicio de Unix

+0

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

+0

Check in serverfault.com/superuser.com. El sistema podría saber más acerca de esto (nohup, inittabs, cron, etc.) – Jayan

Respuesta

29

Bueno, si desea ejecutar el programa Java, incluso cuando se sale de su cáscara, la siguiente es la forma más sencilla :

$nohup java -jar program.jar & 
+10

considere redireccionar stderr y stdout como parte del comando. p.ej. 'nohup java .... 1>/dev/null 2> & 1 &' – JeremyP

1

Puede utilizar un trabajo cron para programar su programa. También puede consultar el artículo this para obtener detalles sobre cómo ejecutar scripts al inicio. Puede escribir un script que ejecute su programa java y ejecutarlo al inicio como se menciona en el artículo.

+0

Esto es bueno si desea ejecutar un programa periódicamente. El programa debería terminar cuando esté hecho. – KarlP

4

puede iniciarlo como:

java -jar program.jar 

demonios Unix normalmente se inician por init o iniciadas por un guión en /etc/init.d o /etc/rc.d, y empezaron a niveles de ejecución específicos - normalmente por enlaces blandos en /etc/rcX.d. (donde X es el "nivel de ejecución" previsto, que normalmente es 3.

Creo que Debian se está moviendo al uso de "upstart", un reemplazo de init. Utiliza archivos de configuración en /etc/init para definir trabajos, y son bastante fáciles de usar write. Verifique

Daemons tradicionalmente cierra stdin, sdtout y stderr, y hace una "doble horquilla" al arrancar, para desprenderse de la sesión y también para indicar que están listos para manejar lo que sea que deben manejar Esto no es realmente necesario, siempre y cuando el daemon no se inicie desde la terminal.

Si desea que un simple contenedor de shell inicie su programa, solo tiene que escribir un pequeño shell s cripta:

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

... y hacerlo ejecutable (chmod 755)

10

es necesario crear un script adecuado en /etc/init.d y vincularlo a /etc/rcX.d directorios. La secuencia de comandos debe admitir al menos los parámetros start, stop y status. Durante el arranque, debe ejecutar el comando java con los argumentos apropiados, probablemente a través del nohup java <arguments> &. Luego debe guardar el PID de su proceso recién iniciado en el archivo /var/run/yourservice.pid. El comando stop debe leer este archivo PID y eliminar este servicio. Los detalles varían de la distribución a la distribución, la mayoría de las distribuciones proporcionan algunas macros para facilitar el trabajo completo. Lo mejor es mirar ejemplos de otros servicios en /etc/init.d para su distribución.

Además: Si no se accede a su servicio desde otras computadoras de la red, pero abre algún puerto, no lo habilite con el firewall.

Si su servicio procesa algunos datos "delicados", es bueno agregar otro usuario e invocar un comando sudo apropiado en su archivo /etc/init.d.

+0

En Debian, hay un script prefabricado, que puede copiar y adaptar a sus necesidades: '/ etc/init.d/skeleton' – barjak

+0

En las computadoras Linux hay un comando de utilidad, 'chkconfig', que crea los enlaces en los directorios'/etc/rcX' para usted al examinar los comentarios de formato especial en su secuencia de comandos. – Raedwald

Cuestiones relacionadas