Cómo crear y ejecutar nuevas unidades de servicio en Systemd usando script shell

Cómo crear y ejecutar nuevas unidades de servicio en Systemd usando script shell

Hace unos días, me encontré con un Centos 7 Distro de 32 bits y sentí el deseo de probarlo en una vieja máquina de 32 bits. Después de arrancar, me di cuenta de que tenía un error y que estaba perdiendo la conexión de red, que tuve que girarla "arriba" manualmente cada vez después del arranque. Entonces, la pregunta era cómo podría configurar un script haciendo este trabajo, ejecutando cada vez que arranque mi máquina?

Bueno, esto es muy simple y te mostraré el sistema Systemd usando unidades de servicio. Pero primero una pequeña introducción a las unidades de servicio.

En este artículo, voy a explicar qué "unidad de servicio" En Systemd es, qué tan fácil es crear y ejecutar uno. Intentaré simplificar lo que "Objetivos" son por qué los llamamos "Colecciones de unidades" y cuáles son sus "quiere". Finalmente estamos aprovechando una unidad de servicio para ejecutar nuestro propio script después del procedimiento de arranque.

Es obvio que su computadora es útil debido a los servicios que ofrece y para tener esta funcionalidad, muchos servicios deben llamarse como botas de computadora y alcanza diferentes niveles. Se llaman a otros servicios a ser ejecutados cuando la computadora alcanza, por ejemplo, el nivel de rescate (RunLevel 0) y otros cuando alcanza el nivel de múltiples usuarios (RunLevel 3). Puedes imaginar estos niveles como objetivos.

De una manera simple, el objetivo es una colección de unidades de servicio. Si desea echar un vistazo a las unidades de servicio que se ejecutan en su gráfico.objetivo nivel, tipo:

# SystemCTL --Type = Servicio 
Enumere todas las unidades de servicio en Centos 7

Como puede ver, algunos servicios están activos y "correr" todo el tiempo, mientras que otros corren una vez y terminan (salen). Si desea verificar el estado de un servicio, escriba:

# SystemCTL Status Firewalld.servicio 
Verifique el estado del servicio en CentOS 7

Como puede ver, revisé el estado de cortafuegos.servicio (consejo: Puede usar el auto-completado para el nombre del servicio). Me informa que cortafuegos El servicio se ejecuta todo el tiempo y está habilitado.

No te pierdas: Cómo configurar el servicio de firewalld en CentOS 7

Habilitado y deshabilitado significa que el servicio se cargará permanentemente o no, durante el siguiente arranque respectivamente. Por otro lado, para comenzar y detener un servicio tiene la limitación de la presente sesión y no es permanente.

Por ejemplo, si escribe:

# SystemCTL Stop Firewalld.Servicio # SystemCTL Status Firewalld.servicio 
Administrar servicios en Centos 7

Puedes ver que el cortafuegos.servicio está inactivo (muerto) pero todavía está habilitado, lo que significa que durante el próximo arranque se cargará. Entonces, si queremos que se cargue un servicio durante el tiempo de arranque en el futuro, debemos habilitarlo. Que gran conclusión! Creamos uno, es fácil.

Si vas a la carpeta:

# cd/etc/systemd/sistema # ls -l 
Archivos del sistema Systemd

Puede ver algunos archivos de enlace de servicios unitarios y algunos directorios del "quiere" de un objetivo. Por ejemplo: lo que el objetivo múltiple quiere cargarse cuando el procedimiento de arranque alcanza su nivel, se enumera en el directorio con nombre /etc/systemd/system/múltiples usuarios.objetivo.quiere/.

# LS Multi-User.objetivo.quiere/ 
Servicios de múltiples objetivos para usuarios

Como puede ver, no contiene solo servicios pero también otro objetivos que también son colecciones de servicios.

Hagamos una unidad de servicio con el nombre conexión.servicio.

# conexión VIM.servicio 

y escriba lo siguiente (presione "i" Para el modo de inserción), guárdelo y salga (con "Esc" y ": WQ!" )

[Unidad] Descripción = Hacer una conexión de red After = Network.Target [servicio] execstart =/root/scripts/conup.sh [install] WantedBy = Multiuser.objetivo 
Crear nuevas unidades de servicio en Centos 7

Para explicar lo anterior: hemos creado una unidad de tipo de servicio (también puede crear unidades de tipo de destino), lo hemos establecido para cargar después del red.objetivo (Puede entender que el procedimiento de arranque alcanza los objetivos con un orden definido) y queremos que cada vez que el servicio comience a ejecutar un script bash con el nombre conmovedor.mierda que vamos a crear.

La diversión comienza con la última parte [instalar]. Dice que será buscado por "multi usuario.objetivo". Entonces, si habilitamos nuestro servicio, se creará un enlace simbólico a ese servicio dentro del multi usuario.objetivo.quiere carpeta! Entiendo? Y si lo deshabilitamos, ese enlace se eliminará. Tan sencillo.

Solo habilitarlo y verificar:

# SystemCTL Habilitar la conexión.servicio 

nos informa que el enlace simbólico en el multi usuario.objetivo.quiere Se ha creado una carpeta. Revisalo:

# LS Multi-User.objetivo.quiere/ 
Habilitar el servicio en Centos 7

Como se puede ver "conexión.servicio" está listo para el próximo arranque, pero primero debemos crear el archivo de script.

# cd /root # mkdir scripts # scripts de cd # vim conup.mierda 

Agregue la siguiente línea dentro empuje y guárdelo:

#!/bin/bash nmcli conexión up enp0s3 

Por supuesto, si desea que su script ejecute algo más, podría escribir lo que quiera en lugar de la segunda línea.

Por ejemplo,

#!/bin/bash touch/tmp/testbootfile 

que crearía un archivo dentro /TMP carpeta (solo para verificar que su servicio esté funcionando).

También debemos hacer que el script sea ejecutable:

# chmod +x conup.mierda 

Ahora estamos listos. Si no desea esperar hasta el próximo arranque (ya está habilitado), podemos iniciar el servicio para la escritura de sesión actual:

# Conexión de inicio de SystemCTL.servicio 

Voila! Mi conexión está en funcionamiento!

Si ha elegido escribir el comando "Touch /tmp /testbootfile" Dentro del script, solo para verificar su funcionalidad, verá este archivo creado dentro /TMP carpeta.

Confirmar el estado del servicio

Realmente espero ayudarlo a descubrir qué servicios, deseos, objetivos y ejecutar scripts durante el arranque se trata.