¿Cómo hacer que un archivo jar se ejecute al inicio y al cerrar sesión?

¿Cómo hacer que un archivo jar se ejecute al inicio y al cerrar sesión?

No tengo idea de por dónde empezar a buscar. He estado leyendo sobre demonios y no entendí el concepto.

Más detalles :

  • He estado escribiendo un rastreador que nunca se detiene y rastrea RSS en Internet.
  • El rastreador se ha escrito en Java, por lo que ahora mismo es un jar.
  • Soy administrador de una máquina que tiene Ubuntu 11.04.
  • Hay algunas posibilidades de que la máquina falle, por lo que me gustaría que el rastreador se ejecute cada vez que inicie la máquina.
  • Además, me gustaría que siguiera ejecutándose incluso cuando cierre la sesión. No estoy seguro de que esto sea posible, pero la mayoría de las veces estoy desconectado y todavía quiero rastrearlo.

¿Algunas ideas? ¿Alguien me puede apuntar en la dirección correcta?

Sólo busco la solución más sencilla.

Respuesta1

Aquí hay una manera fácil de hacerlo usando SysVInit. Instrucciones:

  1. Cree el script de inicio y detención de su aplicación. Ponlo en algún directorio, en nuestro ejemplo es:

    • Guión de inicio:/usr/local/bin/myapp-start.sh
    • Detener guión:/usr/local/bin/myapp-stop.sh

    Cada uno proporcionará las instrucciones para ejecutar/detener la aplicación. Por ejemplo, el myapp-start.shcontenido puede ser tan simple como el siguiente:

    #!/bin/bash
    
    java -jar myapp.jar 
    

    Para el script de detención puede ser algo como esto:

    #!/bin/bash
    # Grabs and kill a process from the pidlist that has the word myapp
    
    pid=`ps aux | grep myapp | awk '{print $2}'`
    kill -9 $pid
    
  2. Cree el siguiente script ( myscript) y póngalo en /etc/init.d.

    /etc/init.d/myscriptcontenido:

    #!/bin/bash
    # MyApp
    #
    # description: bla bla
    
    case $1 in
        start)
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
        stop)
            /bin/bash /usr/local/bin/myapp-stop.sh
        ;;
        restart)
            /bin/bash /usr/local/bin/myapp-stop.sh
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
    esac
    exit 0
    
  3. Ponga el script para iniciar con el sistema (usando SysV). Simplemente ejecute el siguiente comando (como raíz):

    update-rc.d myscript defaults 
    

PD: Sé que Upstart es genial y bla bla, pero prefiero el antiguo sistema de inicio SysV.

Respuesta2

¡Sí! Es posible. :)Advenedizoes el camino a seguir para asegurarse de que el servicio siga funcionando. Tiene cinco paquetes, todos instalados por defecto:

  • Advenedizo demonio init y utilidad initctl
  • upstart-logd proporciona el demonio logd y el archivo de definición de trabajo para el servicio logd
  • upstart-compat-sysv proporciona archivos de definición de trabajos para las tareas rc y las herramientas de reinicio, nivel de ejecución, apagado y telinit que brindan compatibilidad con SysVinit.
  • startup-tasks proporciona archivos de definición de trabajos para las tareas de inicio del sistema
  • system-services proporciona archivos de definición de trabajos para servicios tty

El aprendizaje es muy divertido y merece la pena. Upstart tiene un sitio web:http://upstart.ubuntu.com/

Respuesta3

3 sugerencias rápidas...

  1. Crear unSscript de inicio en /etc/rc3.d(modo consola multiusuario) con su correspondientekmalos scripts /etc/rc.0y /etc/rc6.dpara finalizar su programa Java de forma controlada cuando el sistema se apaga (nivel de ejecución 0) o se reinicia (nivel de ejecución 6) ConsulteUna introducción a los niveles de ejecución.

    Es posible que pueda iniciar su aplicación Java en el nivel de ejecución 2 (rc2.d) pero, como rastreador, necesitará TCP/IP. Así que asegúrese de que su servicio de red esté disponible/iniciado en su nivel de ejecución 2 de antemano. La conexión en red definitivamente está en el nivel de ejecución 3.

    /etc/init.dcontiene todos los scripts de inicio/cierre reales. /etc/rcN.dlos directorios solo contienen enlaces a ellos, con el prefijo S o K para iniciarlos o finalizarlos respectivamente, por nivel de ejecución N.

  2. Un proceso ejecutado por cronddebe persistir entre cierres de sesión. Tal vez agréguelo a su crontab.

  3. Un proceso ejecutado con nohuptambién debería persistir. Vernohup: ejecuta un comando incluso después de cerrar sesión.

    $ nohup java -jar myapp.jar &
    

    De forma predeterminada, myapp.jarla salida estándar de irá a un archivo llamado ./nohup.out, o $HOME/nohup.outsi el primero no se puede escribir.

Respuesta4

Scripts de inicio simples con verificación de versión de Java para Linuxagente de autenticación y ventanasagente-autenticación.bat

información relacionada