2010-04-27 18 views
6

Aunque encontré varias veces esta pregunta en varias ocasiones en SW, no encontré una respuesta definitiva sobre cuál es el mejor enfoque.La mejor manera de demonizar la aplicación Java en Linux

No estoy buscando utilizar ningún contenedor externo, ya que los encontré lanzando el proceso de java a un buen nivel más bajo que ellos mismos que potencialmente reduce el rendimiento, por lo que parece que solo quedan los métodos de shell.

me encontré hasta ahora 3 métodos diferentes: shell

  • start-stop-daemon
  • RedHat función daemon init.d
  • nohup en el arranque/Disown tras la puesta en

Lo ¿Ustedes lo están usando y lo pueden recomendar como el método más confiable?

Gracias.

+0

"Lo que ustedes están usando" las preguntas de sondeo están fuera del tema para SO – Raedwald

+0

"Lo que ustedes están usando" ES el tema, es TAN molesto que ustedes decidan simplemente cerrar las cosas porque están "basadas en opiniones". ¿Irónico no es? – Nazar

Respuesta

5

Si bien la respuesta estándar a esto parece ser jsvc, he estado usando djb daemon tools para ser una gran manera de convertir cualquier cosa en un daemon.

Tengo Java, Python y algunos scripts de shell que se ejecutan como daemons, con una forma simple de iniciar/detenerlos y un gran registro.

He utilizado para ejecutar daemontools como raíz en initctl como originalmente diseñado, pero después de unos meses decidí ejecutarlo manualmente, bajo un usuario normal, y usando svscan-start para un registro más agradable.

-1

Usted podría tratar de usar screen (pantalla de inicio, a continuación, iniciar el programa Java, a continuación, cierre [No dejar de fumar] la pantalla)

+0

No del todo una sugerencia terrible, hago esto para ciertas cosas. Pero creo que esto está bastante lejos de la intención de ejecutar algo como daemon. Aún así, gracias por la sugerencia. –

1

yo no descartaría las envolturas externas completamente.
He notado algunos programas muy respetados que usan Tanuki Wrapper http://wrapper.tanukisoftware.org/.

Esto tiene la ventaja añadida de que el programa también se puede ejecutar fácilmente como un servicio de Windows, con un enfoque coherente.

+0

No va a poder ejecutar esto como un servicio de Windows en Linux. – danben

+0

Bueno, realmente no he estado viendo todos los desarrollos mono todo de cerca, pero ese no era el punto de todos modos. Por qué restringir la aplicación a ejecutarse en Linux solo innecesariamente Quizás otros puedan encontrar la necesidad de ejecutar la aplicación y encontrarse en una posición en la que solo puedan ejecutarse en Windows. En lugar de ahuyentar a los posibles usuarios, ¿por qué no limitar las restricciones y fomentar la reutilización? – crowne

5

Si quiero ejecutar una aplicación en segundo plano como un demonio, lo hago de esta manera:

nohup java -jar MyJar &

No hay nada particularmente poco fiable al respecto - nohup le impide recibir una SIGHUP cuando se desconecta y & ejecuta un proceso en segundo plano.

Opcionalmente, puede redirigir la salida a algo distinto de nohup.out.

2

Usaría la función init.d de RedHat daemon. Esto le permite reiniciar la aplicación cuando lo hace el servidor. La ejecución de nohup no maneja los reinicios del servidor, etc.

1

He usado Akuma en el pasado, con gran éxito. El hecho de que sea una biblioteca de Java realmente facilita las cosas, la incorporación de la funcionalidad es trivial.

3

Eche un vistazo a http://yajsw.sourceforge.net/. Se trata de una implementación gratuita y algo compatible de TanukiSoftware Java Service Wrapper con soporte gratuito de 64 bits.

También hay una tabla de comparación para YAJSW, JSW, ACD y L4J.

Cuestiones relacionadas