GNU/Linux >> Tutoriales Linux >  >> Debian

Cómo ejecutar un script al arrancar en Debian 11

Arrancar en términos simples se refiere al tiempo desde el encendido hasta el momento de inicio del usuario. Esto se logra mediante el uso de un script de arranque que contiene instrucciones sobre qué código cargar y qué procesos y aplicaciones iniciar.

Hay algunas etapas de inicio de Linux (antes de iniciar systemd o System V init y antes de que se cargue el entorno de escritorio), y puede configurar su propio script o programa de inicio automático en cualquier etapa donde podría ser un solo comando o más bien un serie de comandos o un script de shell ejecutable. Sin embargo, es informativo tener en cuenta que podría haber algunas diferencias en el procedimiento de inicio entre varias distribuciones y versiones de Linux.

Las versiones modernas de Linux se iniciarán primero en systemd mientras que las versiones anteriores utilizan System V init . Ambos métodos ejecutarán cron y rc.local antes de que se carguen los entornos de escritorio como KDE o GNOME. Por otro lado, las distribuciones de Linux basadas en servidor ejecutan el shell predeterminado, por ejemplo, Bash, después de que el usuario inicie sesión en la consola en lugar de cargar el entorno de escritorio.

Para agregar adecuadamente servicios y secuencias de comandos al inicio en Debian 11, debe crear unidades Systemd. Esta guía se centrará en tres métodos para agregar scripts al inicio de su máquina Debian 11:

  1. Uso de systemd
  2. Usando cron
  3. Uso de rc.local

Comencemos.

¿Qué es una unidad systemd?

Las unidades Systemd son archivos de configuración que contienen información para la gestión o ejecución adecuada de ciertos archivos del sistema. En systemd, una unidad denota cualquier recurso que el sistema sabe cómo operar y administrar. Las unidades Systemd generalmente se usan para iniciar, detener, administrar servicios, organizar procesos de arranque, mantener tareas y procesos, crear sockets, puntos de montaje automático, intercambiar archivos o particiones, montar sistemas de archivos e inicializar hardware.

Las unidades de Systemd se ubican en el directorio /etc/systemd/system. Cualquier script que desee ejecutar en el arranque utilizando unidades Systemd debe indicarse en un archivo (unidad) en el directorio mencionado anteriormente.

Para simplificar la relación entre systemd y unidades mejor, considere systemd como entrenador de un equipo y luego las unidades como las comodidades y necesidades en el equipo, por ejemplo, pelotas, callos, gimnasio, campo de juego, kits de juego, solo por mencionar algunos. Entonces, para hacer que un entrenador administre el equipo para que funcione mejor, utiliza el equipo disponible para mejorar profundamente el equipo. De manera similar, systemd usa unidades para controlar y administrar los procesos y servicios del sistema.

Algunos de los tipos de unidades Systemd incluyen:
  • Objetivo: Una colección de unidades que describe un punto de sincronización. El punto de sincronización se utiliza en el momento del arranque para iniciar el sistema en un estado específico.
  • Montaje – Una unidad de este tipo controla el punto de montaje del sistema de archivos.
  • Dispositivo: Una unidad de este tipo adapta la activación basada en dispositivos como un controlador de dispositivo.
  • Enchufe: Este tipo de unidad activa un servicio cuando el servicio recibe tráfico entrante en un socket de escucha.
  • Ruta – Este tipo de unidad monitorea archivos/directorios y luego activa/desactiva un servicio si se recupera el archivo o directorio indicado.
  • Temporizador: Este tipo de unidad realiza la activación y desactivación de un servicio específico en función de un temporizador o cuando transcurre el tiempo establecido.
  • Alcance: Una unidad que sistematiza y gestiona los procesos extranjeros.

Listado de unidades systemd

A continuación se muestra una vista rápida de las unidades systemd existentes en nuestro sistema que utilizan ls comando.

ls /etc/systemd/system

Uno de los archivos excluidos en la instantánea anterior es tomcat.service, cuyo contenido se muestra en la siguiente imagen.

Para familiarizarse con los archivos de configuración de la unidad en la instantánea anterior, consulte la siguiente información detallada. No se preocupe por ellos, ya que la unidad que creará para ejecutar su secuencia de comandos será un poco más simple.

Las directivas de la unidad incluyen;
  • Descripción: Esta directiva generalmente le permite agregar una descripción para una unidad; aquí, puede configurar el nombre de la unidad para que sea reconocido.
  • Quiere: Las dependencias de las unidades se especifican habitualmente aquí. Un punto a tener en cuenta es que existen varias directivas para este propósito similar. Por ejemplo, la directiva Requires estipula dependencias estrictas, sin las cuales la unidad no puede funcionar. A diferencia de Requires, Wants se utiliza para especificar dependencias sin las cuales la unidad puede seguir funcionando.
  • Después: La unidad actual comenzará después de la unidad designada en esta directiva.
Directivas de la sección [Servicio]:

  • Tipo: la bifurcación indica que el servicio se eliminará mientras se mantienen los procesos secundarios a los que se les debe asignar una identificación de proceso (PID).
  • Entorno: Aquí, se pueden especificar las variables de entorno de la unidad.
  • Inicio ejecutivo: Esta directiva le permite especificar la ruta y los comandos que desea ejecutar.
  • Parada ejecutiva: puede indicar el comando utilizado para detener la unidad.
  • Estado de salida exitosa: Esta directiva le permite enumerar el estado y las señales de salida.
  • Usuario: puede identificar al usuario propietario de la unidad.
  • Grupo: puede enumerar el propietario del grupo de la unidad.
  • UMask: puede especificar la máscara de usuario.
  • Reiniciar segundo: Si la unidad se reinicia espontáneamente, puede especificar el tiempo de espera para reiniciar el servicio.
  • Reiniciar: puede indicarle a Systemd cuándo debe reiniciarse la unidad. Las opciones accesibles son siempre vigilancia, falla, anomalía, éxito y cancelación.

La directiva [Instalar] en la instancia anterior es WantedBy.

  • Buscado por: Esta directiva le permite delinear la unidad como una dependencia; es similar a los Deseos directiva, sino para designar si la unidad actual está bien pensada como una dependencia de otra unidad.

Otras directivas habituales en la sección [Unidad] que no se incorporaron en la captura de pantalla anterior:

  • Requisitos: En esta directiva, puede designar dependencias para evitar errores de arranque. Oponerse a los Deseos directiva, si no se cumple una dependencia designada con la directiva Requires, la unidad no funcionará.

En la sección [Servicio]:

  • Archivo PID: La directiva de bifurcación requiere la directiva PIDFile, que tiene la ruta al archivo PID del proceso secundario para que Systemd lo detecte.
  • Intervalo límite de inicio: especifica que la unidad tiene 60 segundos para 10 intentos de reinicio en caso de falla.
  • Iniciar límite de ráfaga: Esta directiva muestra el límite de intentos, en el ejemplo anterior, diez intentos en 60 segundos.

Puede visitar este enlace para obtener más información sobre las unidades de Systemd.

Ejecute un script al arrancar en Debian 11

Método 1:usar la unidad systemd para ejecutar un script en el arranque

Ejecutar un script en el arranque puede ser sencillo y tener menos configuración que el archivo tomcat.service que usamos anteriormente para mostrar el contenido común de la unidad.

Los archivos (unidades) que tienen información sobre los scripts que se ejecutan en el arranque se colocan en /etc/systemd/system. Para expresar una secuencia de comandos para ejecutar en el arranque, debe generar una nueva unidad para esta secuencia de comandos. Como tal, puede utilizar cualquier editor para fines de creación. Sin embargo, en nuestro ejemplo, usaremos el editor nano, en el que crearemos una unidad llamada script.service. Tenga en cuenta que este nombre se puede cambiar a cualquiera de sus preferencias para identificar su secuencia de comandos convenientemente.

sudo nano /etc/systemd/system/script.service

Después de eso, copie y pegue el siguiente código en el archivo que generó en /etc/systemd/system.

</PATH/TO/Script.sh> with the path to your script.
[Unit]

Description=Your Script Name here

After=default.target

[Service]

ExecStart=/PATH/TO/Script.sh

[Install]

Después de eso, recuerde reemplazar con el nombre de su secuencia de comandos y con la ruta a su secuencia de comandos como se muestra a continuación:

Después de copiar los datos en el archivo en /etc/systemd/system/, debe habilitarlo mediante el comando systemctl que se muestra a continuación.

sudo systemctl enable script.service

Nota: Recuerde reemplazar con el nombre apropiado que le asignó a la unidad.

¡Y bum! Ahora su secuencia de comandos está lista para iniciarse en Debian 11

Método 2:cómo ejecutar automáticamente un programa en el inicio de Linux a través de Cron

Cron es un demonio que se utiliza para ejecutar comandos programados. Los comandos se almacenan en la tabla de trabajo de la corona o contrab y son peculiares para cada usuario en el sistema. Se activa durante el inicio del sistema, ya sea por System V init o systemd, y puede programar su trabajo o, en su lugar, programar para que se ejecute justo durante el inicio del sistema siguiendo cuidadosamente los pasos siguientes:

Paso 1: Abra el editor de contratos predeterminado ejecutando el siguiente comando:

crontab -e

Si es la primera vez que ejecuta el comando contrab, se le pedirá que elija un editor como se muestra en el siguiente fragmento de código:

$ crontab -e
no crontab for user - using an empty one

Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /bin/ed

Choose 1-3 [1]:

Al seleccionar la cantidad dada de opciones, se creará un contrato para usted y se ejecutará utilizando los privilegios del usuario. En caso de que necesite que su programa se ejecute como usuario raíz, ejecute contrab -e como el propio usuario raíz

Paso 2: Agregue una línea que comience con @reboot

# m h dom mon dow command
@reboot

Paso 3: Inserte el comando preferido para iniciar su programa después de @reboot como se muestra a continuación:

@reboot /sbin/ip addr | grep inet\ | tail -n1 | awk '{ print $2 }' > /etc/issue && echo "" >> /etc/issue

@reboot define la tarea que se ejecutará durante el arranque del sistema.

Nota: Asegúrese de usar la ruta completa para sus programas siempre que sea posible y escriba sus comandos en una sola línea para evitar conflictos con el sistema.

Paso 4:Guarda el archivo

Después de cerrar el editor usando “Ctrl + x” como se muestra a continuación

luego “Y” para guardar,

Debería ver un comando que diga “instalando nuevo contrato” en la terminal como se muestra a continuación:

Paso 5:Configuración

Finalmente, puede ejecutar una verificación para confirmar si el contrato se configuró correctamente. No obstante, es fundamental tener en cuenta que este paso no es obligatorio

crontab -l

¡Y eso debería bastar, muchachos!

Método 3:cómo ejecutar automáticamente un programa en el inicio de Linux a través de RC.LOCAL

rc.local es simplemente un legado del sistema de inicio System V. Es el último script que se ejecuta antes de pasar a una pantalla de inicio de sesión para el entorno de escritorio o un indicador de inicio de sesión en la terminal. Por lo general, es un script de shell Bash, y también puede ejecutar cualquier cosa desde el script. Use los siguientes pasos para configurar su script local rc.local.

Paso 1: Primero, cree el archivo /etc/rc.local si no existe en su sistema usando su editor preferido y como usuario raíz. En nuestro caso, iremos con el editor Vi ejecutando el siguiente comando:

sudo vi /etc/rc.local

Paso 2: Agregar código de marcador de posición

Después de eso, agregue el siguiente código de marcador de posición en el archivo

#!/bin/bash

exit 0

Debe comenzar con el intérprete (/bin/bash) y terminar con un código de salida (0 que indica éxito).

Paso 3: Agregar comando y lógicas

Aquí, agregará comandos y lógica a los archivos según sea necesario.

/sbin/ip addr | grep inet\ | tail -n1 | awk '{ print $2 }' > /etc/issue
echo "" >> /etc/issue

Echa un vistazo a cómo se hace esto en la siguiente instantánea.

Paso 4:Guardar y salir de Vi Editor

Para guardar y salir de un archivo en el editor Vim, use “:wq” dominio. Queremos guardar el archivo y salir del editor al mismo tiempo para ejecutar el comando que hace que el archivo sea ejecutable. Como tal, presione ESC que cambiará al modo normal. Después de eso, escriba :wq y presione “Entrar”.

Paso 5: Hacer el archivo ejecutable

Después de guardar el archivo, debemos hacerlo ejecutable usando el siguiente comando:

sudo chmod a+x /etc/rc.local

Luego, el archivo debe ejecutarse como usuario raíz durante el arranque del sistema.

Conclusión

En conclusión, ejecutar scripts en el arranque en Debian 11 usando Systemd, cron y rc.local es relativamente fácil. Cualquier usuario de Linux puede completar rápidamente esta tarea creando un archivo simple dentro del directorio de unidades. Este artículo ha analizado diferentes formas de ejecutar un script en un inicio en la distribución de Linux, específicamente Debian.

Cada uno tiene sus ventajas y desventajas, pero en términos generales, systemd y cron deberían ser las opciones preferidas. Por otro lado, también puede usar rc.local que también vimos.


Debian
  1. script de inicio utorrent / ejecutar utorrent en el arranque – Ubuntu 14.04 / 14.10

  2. Debian:¿cómo ejecutar programas de 32 bits en un Debian/ubuntu de 64 bits?

  3. ¿Cómo ejecutar un script?

  4. ¿Cómo ejecutar un script cuando llega un correo al servidor de correo? (Debian)

  5. ¿Cómo ejecutar un script con systemd justo antes de apagar?

Cómo ejecutar un script de Python en PHP

Cómo instalar Wine para ejecutar aplicaciones de Windows en Debian

Cómo ejecutar Shell Script como servicio SystemD en Linux

Cómo ejecutar Unetbootin en Debian 11 Bullseye

Cómo ejecutar un script Bash

Debian – ¿Cómo reparar Grub en Debian?