linux - make - Ejecute el script bash como daemon
do a bash script (4)
Tengo un script, que ejecuta mi script PHP cada X veces:
#!/bin/bash
while true; do
/usr/bin/php -f ./my-script.php
echo "Waiting..."
sleep 3
done
¿Cómo puedo comenzar como daemon?
Otro truco genial es ejecutar funciones o subcapas en segundo plano, aunque no siempre es factible
name(){
echo "Do something"
sleep 1
}
# put a function in the background
name &
#Example taken from here
#https://bash.cyberciti.biz/guide/Putting_functions_in_background
Ejecutando una subshell en el fondo
(echo "started"; sleep 15; echo "stopped") &
Para ejecutarlo como un daemon completo desde un shell, necesitarás usar setsid
y redirigir su salida. Puede redirigir la salida a un archivo de registro, o a /dev/null
para descartarlo. Suponiendo 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 el resultado en un archivo de registro, reemplace el primer /dev/null
con su / path / to / logfile.
Tienes que redirigir el resultado, de lo contrario no se ejecutará como un daemon verdadero (dependerá de tu shell para leer y escribir el resultado).
Puede ir a /etc/init.d/ - verá una plantilla de daemon llamada skeleton.
Puede duplicarlo y luego ingresar su script bajo la función de inicio.
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 ...
[El siguiente código bash es para sistemas Debian - Ubuntu, Linux Mint, distros, etc.]
La manera simple:
La forma más simple sería editar su archivo /etc/rc.local y luego ejecutar su script desde allí (es decir, cada vez que inicie el sistema):
sudo nano /etc/rc.local
Agregue lo siguiente y guárdelo:
#For a BASH script
/bin/sh TheNameOfYourScript.sh > /dev/null &
La mejor forma de hacerlo sería crear un Daemon mediante Upstart:
sudo nano /etc/init/TheNameOfYourDaemon.conf
agregue 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.
Confirma que se ve bien:
init-checkconf /etc/init/TheNameOfYourDaemon.conf
Ahora reinicia la máquina:
sudo reboot
Ahora cuando inicie 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á y luego comenzará 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