Ya no necesitas investigar más por todo internet porque has llegado al espacio perfecto, contamos con la respuesta que necesitas sin complicarte.
Solución:
Para ejecutarlo como un demonio completo desde un shell, deberá usar setsid
y redirigir su salida. Puede redirigir la salida a un archivo de registro o a /dev/null
para descartarlo. Asumiendo que su script se llama myscript.sh, use el siguiente comando:
setsid myscript.sh >/dev/null 2>&1 < /dev/null &
Esto separará completamente el proceso de su shell actual (stdin, stdout y stderr). Si desea mantener la salida en un archivo de registro, reemplace el primero /dev/null
con su /ruta/al/archivo de registro.
Tienes que redirigir la salida, de lo contrario no se ejecutará como un true daemon (dependerá de su shell para leer y escribir la salida).
Un Daemon es solo un programa que se ejecuta como un proceso en segundo plano, en lugar de estar bajo el control directo de un usuario interactivo...
[The below bash code is for Debian systems - Ubuntu, Linux Mint distros and so on]
La forma sencilla:
La forma más sencilla sería editar su archivo /etc/rc.local y luego hacer que su script se ejecute desde allí (es decir, cada vez que inicie el sistema):
sudo nano /etc/rc.local
Agregue lo siguiente y guarde:
#For a BASH script
/bin/sh TheNameOfYourScript.sh > /dev/null &
La mejor manera de hacer esto sería crear un Daemon a través de Upstart:
sudo nano /etc/init/TheNameOfYourDaemon.conf
agrega lo siguiente:
description "My Daemon Job"
author "Your Name"
start on runlevel [2345]
pre-start script
echo "[`date`] My Daemon Starting" >> /var/log/TheNameOfYourDaemonJobLog.log
end script
exec /bin/sh TheNameOfYourScript.sh > /dev/null &
Guarda esto.
Confirme que se ve bien:
init-checkconf /etc/init/TheNameOfYourDaemon.conf
Ahora reinicie la máquina:
sudo reboot
Ahora, cuando inicia su sistema, puede ver el archivo de registro que indica que su Daemon se está ejecutando:
cat /var/log/TheNameOfYourDaemonJobLog.log
• Ahora puede iniciar/detener/reiniciar/obtener el estado de su Daemon a través de:
reiniciar: esto se detendrá, luego iniciará un servicio
sudo service TheNameOfYourDaemonrestart restart
start: esto iniciará un servicio, si no se está ejecutando
sudo service TheNameOfYourDaemonstart start
detener: esto detendrá un servicio, si se está ejecutando
sudo service TheNameOfYourDaemonstop stop
estado: esto mostrará el estado de un servicio
sudo service TheNameOfYourDaemonstatus status
Puede ir a /etc/init.d/ - verá una plantilla de daemon llamada skeleton.
Puede duplicarlo y luego ingresar su script en la función de inicio.
Si sostienes alguna desconfianza y disposición de limar nuestro sección te sugerimos realizar un exégesis y con mucho placer lo ojearemos.