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:
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.sh
contenido 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
- Guión de inicio:
Cree el siguiente script (
myscript
) y póngalo en/etc/init.d
./etc/init.d/myscript
contenido:#!/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
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...
Crear unSscript de inicio en
/etc/rc3.d
(modo consola multiusuario) con su correspondientekmalos scripts/etc/rc.0
y/etc/rc6.d
para 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.d
contiene todos los scripts de inicio/cierre reales./etc/rcN.d
los directorios solo contienen enlaces a ellos, con el prefijo S o K para iniciarlos o finalizarlos respectivamente, por nivel de ejecución N.Un proceso ejecutado por
crond
debe persistir entre cierres de sesión. Tal vez agréguelo a su crontab.Un proceso ejecutado con
nohup
también debería persistir. Vernohup: ejecuta un comando incluso después de cerrar sesión.$ nohup java -jar myapp.jar &
De forma predeterminada,
myapp.jar
la salida estándar de irá a un archivo llamado./nohup.out
, o$HOME/nohup.out
si 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