LSB significa base estándar de Linux.
LSB fue iniciado por Linux Foundation para reducir la diferencia entre varias distribuciones de Linux y, por lo tanto, reducir el costo involucrado en la migración entre diferentes distribuciones. Los guiones de inicio son uno de los que se van a estandarizar.
En este artículo, veremos cómo escribir un script de inicio que cumpla con el estándar LSBInit.
Los scripts de inicio se utilizan para iniciar|detener un servicio|de software. Por ejemplo, si está usando el software postgresql, tendremos un script de inicio llamado '/etc/init.d/postgresql' que se puede usar para 'iniciar|detener|reiniciar|recargar|forzar-recargar|estado'.
Los scripts de inicio compatibles con LSB deben:
- Proporcione al menos "inicio, detención, reinicio, recarga forzada y estado"
- Devolver el código de salida correcto
- Dependencias en tiempo de ejecución del documento
Opcionalmente, pueden usar funciones init.d como "log_success_msg", "log_failure_msg", etc. para registrar los mensajes.
LSB proporciona un conjunto predeterminado de funciones que se encuentra en /lib/lsb/init-functions. Podemos hacer uso de esas funciones en nuestros scripts de inicio. Todo el proceso de inicio por defecto registrará el pid del proceso en un archivo en el directorio /var/run/. Esto es útil para que los scripts de inicio encuentren el estado del proceso.
Ahora comencemos a escribir un script de inicio. Primero, debemos agregar un encabezado a la secuencia de comandos Init, que se parece a,
### BEGIN INIT INFO # Provides: my_daemon # Required-Start: postgresql networking # Required-Stop: postgresql networking # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: This is a test daemon # Description: This is a test daemon # This provides example about how to # write a Init script. ### END INIT INFO
Proporciona especifica cuál es la facilidad proporcionada por este script de inicio. El nombre debe ser único.
Inicio requerido especifica el conjunto de instalaciones que deben iniciarse antes de iniciar este servicio. En nuestro caso, postgresql y networking deben iniciarse antes de iniciar my_daemon. Recuerde, aquí 'postgresql' tendrá un script de inicio separado que dice 'Proporciona:postgresql'. Esto asegura un arranque basado en dependencias. Según esta dependencia, el comando 'inserv' o 'update-rc.d' pondrá las entradas en directorios de nivel de ejecución con el número de secuencia apropiado. Por ejemplo, las entradas pueden ser como sigue
/etc/rc2.d/S12postgresql /etc/rc2.d/S03networking /etc/rc2.d/S13my_daemon
Lo que indica que la red se iniciará primero, luego postgresql y luego my_daemon.
Para obtener más información sobre los niveles de ejecución, consulte la etapa n.º 6 (que es el nivel de ejecución) del proceso de arranque de Linux.
Parada obligatoria especifica la lista de instalaciones que deben detenerse solo después de detener esta instalación. Aquí, solo después de detener my_daemon, se detendrán postgresql y las funciones de red.
Inicio predeterminado Parada predeterminada define los niveles de ejecución en los que se debe iniciar o detener el servicio.
Descripción corta y Descripción se utilizan para dar alguna descripción con respecto a la instalación proporcionada. La descripción puede abarcar varias líneas, la descripción corta se limita a una sola línea.
Veamos un guión de inicio real.
### BEGIN INIT INFO
# Provides: my_daemon
# Required-Start: postgresql networking
# Required-Stop: postgresql networking
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: This is a test daemon
# Description: This is a test daemon
# This provides example about how to
# write a Init script.
### END INIT INFO
# Using the lsb functions to perform the operations.
. /lib/lsb/init-functions
# Process name ( For display )
NAME=my-daemon
# Daemon name, where is the actual executable
DAEMON=/home/user1/my_daemon
# pid file for the daemon
PIDFILE=/var/run/my_daemon.pid
# If the daemon is not there, then exit.
test -x $DAEMON || exit 5
case $1 in
start)
# Checked the PID file exists and check the actual status of process
if [ -e $PIDFILE ]; then
status_of_proc -p $PIDFILE $DAEMON "$NAME process" && status="0" || status="$?"
# If the status is SUCCESS then don't need to start again.
if [ $status = "0" ]; then
exit # Exit
fi
fi
# Start the daemon.
log_daemon_msg "Starting the process" "$NAME"
# Start the daemon with the help of start-stop-daemon
# Log the message appropriately
if start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON ; then
log_end_msg 0
else
log_end_msg 1
fi
;;
stop)
# Stop the daemon.
if [ -e $PIDFILE ]; then
status_of_proc -p $PIDFILE $DAEMON "Stoppping the $NAME process" && status="0" || status="$?"
if [ "$status" = 0 ]; then
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
/bin/rm -rf $PIDFILE
fi
else
log_daemon_msg "$NAME process is not running"
log_end_msg 0
fi
;;
restart)
# Restart the daemon.
$0 stop && sleep 2 && $0 start
;;
status)
# Check the status of the process.
if [ -e $PIDFILE ]; then
status_of_proc -p $PIDFILE $DAEMON "$NAME process" && exit 0 || exit $?
else
log_daemon_msg "$NAME Process is not running"
log_end_msg 0
fi
;;
reload)
# Reload the process. Basically sending some signal to a daemon to reload
# it configurations.
if [ -e $PIDFILE ]; then
start-stop-daemon --stop --signal USR1 --quiet --pidfile $PIDFILE --name $NAME
log_success_msg "$NAME process reloaded successfully"
else
log_failure_msg "$PIDFILE does not exists"
fi
;;
*)
# For invalid arguments, print the usage message.
echo "Usage: $0 {start|stop|restart|reload|status}"
exit 2
;;
esac El script anterior básicamente proporciona una plantilla para escribir scripts LSBInit. Puede cambiar las variables DAEMON,PIDFILE,NAME y el encabezado para hacer que este script se ajuste a sus propios programas.
Para obtener más información sobre las funciones proporcionadas por LSB, consulte Funciones de InitScript
Una vez que se haya completado el script de inicio, para que el script se inicie o se detenga automáticamente, ejecute el siguiente comando. Esto agregará las entradas 'S' y 'K' apropiadas en los niveles de ejecución dados. Esto también agregará el número de secuencia apropiado considerando las dependencias.
update-rc.d filename defaults