GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo escribir secuencias de comandos de inicio de Linux basadas en el estándar de inicio LSB

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

Linux
  1. Cómo escribir archivos de registro en RAM usando Log2ram en Linux

  2. Cómo escribir texto en la imagen usando el comando de Linux

  3. ¿Cómo escribir un archivo con C en Linux?

  4. Cómo escribir un demonio de Linux con .Net Core

  5. ¿Cómo encontrar mensajes de error de los scripts Linux init.d/rc.d?

Cómo analizar archivos CSV en Bash Scripts en Linux

Shell Scripting para principiantes:cómo escribir Bash Scripts en Linux

Cómo encontrar archivos basados ​​en la marca de tiempo en Linux

Cómo usar el comando echo en Bash Scripts en Linux

Cómo escribir y ejecutar un programa C en Linux

¿Cómo escribir en una cámara web virtual en Linux?