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