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
Respuesta
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 &
considere redireccionar stderr y stdout como parte del comando. p.ej. 'nohup java .... 1>/dev/null 2> & 1 &' – JeremyP
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.
Esto es bueno si desea ejecutar un programa periódicamente. El programa debería terminar cuando esté hecho. – KarlP
Este artículo contiene algunos trucos útiles para el funcionamiento de una aplicación Java como un demonio:
http://barelyenough.org/blog/2005/03/java-daemon/
Como alternativa, puede echar un vistazo al proyecto Apache Commons Daemon, aunque esto requiere código nativo (Unix y Win32 compatible):
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)
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
.
En Debian, hay un script prefabricado, que puede copiar y adaptar a sus necesidades: '/ etc/init.d/skeleton' – barjak
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
- 1. Estoy ejecutándose como un servicio
- 2. Ejecutándose en ejecución como un usuario diferente
- 3. ¿Cómo puedo depurar un servicio IIS local con Visual Studio ejecutándose como un usuario no administrador?
- 4. Programa de Java como servicio de Windows
- 5. Instalar el programa Java como un servicio de Windows: ¿alternativa al servicio Java?
- 6. Ejecución de comandos UNIX como usuario diferente, desde Java
- 7. No se puede usar JConsole con Tomcat ejecutándose como servicio de Windows
- 8. Ejecutar la aplicación Java como servicio
- 9. unix - ejecuta un comando como otro usuario
- 10. Programa Java ejecutándose en segundo plano
- 11. Monocompilador como un servicio (MCS)
- 12. Unix stat()/lstat() para Java
- 13. script de Python como un servicio Linux/daemon
- 14. ¿Beneficios de ejecutar Apache como un servicio?
- 15. Implementación de socket UNIX para Java?
- 16. Automatice las instalaciones de Java en Unix
- 17. ¿Cómo ejecutar un script de shell Unix desde código Java?
- 18. ¿Es un servidor un bucle infinito ejecutándose como un proceso en segundo plano?
- 19. Socket de dominio UNIX en Java
- 20. ¿Hay un compilador como servicio para C++?
- 21. Inyectar Twig como un servicio en Symfony2
- 22. Ruby script como servicio
- 23. filesystemwatcher como servicio de Windows?
- 24. Implementar y ejecutar algo con Java en UNIX
- 25. Pasar un objeto como parámetro a un servicio de Windows
- 26. Cómo crear un servicio de escucha C# para MSMQ como un servicio de Windows
- 27. Recomendación para Java VM ejecutándose en el sistema integrado
- 28. Simplemente consumiendo un servicio web en Java
- 29. Cómo invocar un servicio web utilizando Java
- 30. ¿El mejor método para ejecutar una aplicación Java como un * nix Daemon o servicio de Windows?
http://commons.apache.org/daemon/jsvc.html –
Check in serverfault.com/superuser.com. El sistema podría saber más acerca de esto (nohup, inittabs, cron, etc.) – Jayan