En este artículo, aprenderemos los conceptos básicos de cómo configurar servicios y scripts para que se inicien automáticamente en Linux CentOS / RHEL 7/8. En particular, nos familiarizaremos con systemd daemon, aprenda cómo agregar servicios o eliminarlos del inicio, y considere las formas alternativas de iniciar scripts o demonios al arrancar en Linux.

El artículo tiene como objetivo enseñarle a encontrar rápidamente la lista de servicios o scripts que se inician automáticamente en Linux, agregar sus servicios o scripts al inicio o deshabilitar el inicio automático de algunas aplicaciones.

Uso de Systemctl para administrar los servicios de Systemd en Linux

Las distribuciones de Linux más populares (CentOS, RHEL, Debian, Fedora y Ubuntu) utilizan systemd demonio de inicio en lugar de init.d. Systemd es un administrador de servicios de Linux que se utiliza para iniciar otros demonios y administrarlos. Utiliza archivos de unidad de /etc/systemd/system (init.d scripts usados ​​de /etc/init.d/). Systemd le permite paralelizar el inicio del servicio al arrancar el sistema operativo.

Para gestionar el systemd, el systemctl se utiliza el comando.

En primer lugar, después de arrancar el sistema, revisaremos la lista de unidades disponibles en systemd:

systemctl list-units

Puede obtener la lista de archivos de unidad usando este comando:

systemctl list-unit-files

Este comando mostrará todos los archivos de unidades disponibles.

Para mostrar la lista de servicios activos y sus estados, ejecute este comando:

# systemctl list-units -t service

Dado que algunas unidades pueden volverse inactivas después del inicio, puede obtener la lista completa usando el -todas opción.

# systemctl list-units --all

UNIT LOAD ACTIVE SUB DESCRIPTION
proc-sys-fs-binfmt_misc.automount loaded active waiting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
● exim.service not-found inactive dead exim.service
firewalld.service loaded active running firewalld - dynamic firewall daemon
[email protected] loaded active running Getty on tty1
● iptables.service not-found inactive dead iptables.service
Bring up/down networking
● NetworkManager-wait-online.service not-found inactive dead

Como puede ver en la lista, se muestran incluso los servicios que no se encuentran en el disco.

Además, puede usar algunas otras banderas, por ejemplo:

  • -Expresar - utilizado para detectar el estado del demonio: Carga, Activo, Sub
  • -tipo - permite filtrar unidades por tipo

Ejemplos:

systemctl list-units --all --state=active : Muestra la lista de unidades systemd activas solamente

systemctl list-units —type=service - mostrar la lista de unidades que son los servicios

¿Cómo crear un servicio en Systemd?

Para administrar los servicios, systemd utiliza una sintaxis especial. Debes agregar .Servicio después del nombre de un servicio. Por ejemplo:

# systemctl enable nginx.service - el comando agrega el servidor web nginx al inicio

Este comando creará un enlace simbólico a un archivo especificado en el comando de servicio en systemd directorio de inicio.

# systemctl enable nginx.service

Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service

La salida del comando muestra el directorio en el que se creó el enlace simbólico al archivo de servicio.

Para verificar si se ha agregado un servicio al inicio, puede obtener su estado:

systemctl status nginx.service

Tenga en cuenta la siguiente línea en la salida:

Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)

La activado valor significa que este servicio se agrega al inicio de Linux. Si el servicio no se inicia automáticamente, verá discapacitado aquí.

¿Cómo deshabilitar un servicio en Systemd?

Puede eliminar un servicio del inicio para que no se inicie en el arranque de Linux (mientras que el servicio en sí no se elimina). Para deshabilitar el inicio de un servicio, ejecute el siguiente comando:

# systemctl disable your_service

Por ejemplo, para deshabilitar el inicio automático de nginx:

# systemctl disable nginx.service

Removed symlink /etc/systemd/system/multi-user.target.wants/nginx.service

Después de hacerlo, el enlace simbólico a un archivo de servicio se eliminará del directorio systemd. Puede asegurarse de que el servicio se inicie automáticamente:

# systemctl is-enabled nginx

¿Cómo enmascarar unidades con Systemd?

Me he encontrado con algunos servicios perversos que aún permanecieron en el inicio después de deshabilitarlos y comenzaron después del reinicio de Linux. Para resolver este problema, puede enmascarar un servicio:

# systemctl mask nginx.service

Entonces no se iniciará ni manualmente ni después del reinicio del sistema operativo:

# systemctl mask nginx.service

Created symlink from /etc/systemd/system/nginx.service to /dev/null.

# service nginx restart

Redirecting to /bin/systemctl restart nginx.service
Failed to restart nginx.service: Unit is masked.

Puede desenmascarar un servicio con este comando:

# systemctl unmask nginx.service

Removed symlink /etc/systemd/system/nginx.service.

Si después de enmascarar un servicio comprueba los archivos de su unidad, verá que el servicio está marcado como enmascarado:

servicios enmascarados systemctl

Ejecute script o servicio con Rc.local

Para ejecutar diferentes scripts en el arranque de Linux, rc.local se utiliza a menudo.

Además de los scripts, el uso rc.local también puede ejecutar servicios, incluso aquellos que comienzan a usar systemd. No sé por qué debería usar rc.local, si hay systemd, pero aquí hay un par de ejemplos.

En primer lugar, /etc/rc.local debe ser ejecutable:

chmod +x /etc/rc.local

Se debe agregar rc.local al inicio automático de systemd:

systemctl enable rc-local

Y podemos agregar un comando para comenzar nginx servidor web para rc.local:

service nginx start

usando rc.local para ejecutar el comando en linux stratup

Pero rara vez uso rc.local para iniciar los servicios. Más a menudo, rc.local se usa para iniciar un script o ejecutar un comando una vez.

Por ejemplo, he creado un guión /root/test.sh que hace algo y quiero ejecutarlo justo después del arranque. Agregue la siguiente línea al archivo rc.local:

sh /root/test.sh

agregue el script sh a rc.local

Comenzando con CentOS 7, los desarrolladores señalan que rc.local es un demonio obsoleto y no se recomienda usarlo para iniciar scripts o servicios. Pero lo uso mientras todavía está funcionando porque es muy simple.

¿Cómo crear un servicio Linux con Systemd?

Puede crear su propio demonio y administrarlo a través de systemd.

Por ejemplo, desea iniciar el mismo script (/root/test.sh) cada vez que se reinicia el sistema. Comencemos creando un archivo de nuestro nuevo servicio:

touch /etc/systemd/system/test-script.service
chmod 664 /etc/systemd/system/test-script.service
nano /etc/systemd/system/test-script.service

Aquí está el contenido del archivo:

[Unit]
Description=Template Settings Service
After=network.target
[Service]
Type=oneshot
User=root
ExecStart=/root/test.sh
[Install]
WantedBy=multi-user.target

Los principales parámetros son:

User - una cuenta de usuario desde la que se inicia el demonio

Type=oneshot - el systemd debe esperar a que finalice el proceso antes de continuar con otras unidades

Compruébelo y reinícielo:
# systemctl daemon-reload
# systemctl start test-script.service
# systemctl status test-script.service

● test-script.service - Test
Loaded: loaded (/etc/systemd/system/test-script.service; disabled; vendor preset: disabled)
Active: active (running)

Si el servicio funciona bien, agréguelo al inicio de systemd:

# systemctl enable test-script.service

Created symlink from /etc/systemd/system/multi-user.target.wants/test-script.service to /etc/systemd/system/test-script.service.

Por lo tanto, puede agregar cualquier script para que se inicie automáticamente y administrarlos a través de systemd.

¿Cómo ejecutar scripts usando Cron?

Si desea ejecutar un script o un comando con cierta frecuencia, puede usar cron:

crontab -e - abre un editor para cambiar una tabla de tareas cron

Y agregue una tarea que desee aquí, por ejemplo:

* * * * * /root/test.sh - para ejecutar un script una vez por minuto.

Puedes escribir un perro guardián script que comprobará el estado de un servicio, y si el servicio no se está ejecutando, el script lo iniciará. Estoy usando una forma similar en algunos de mis proyectos.

Para mostrar la lista de todas las tareas en cron, ejecute el comando:

# crontab -l

* * * * * /root/test.sh

Los valores de tiempo disponibles para ejecutar las tareas cron en orden:

  • Minutos: 0-59
  • Horas: 0-59
  • Día de un mes: 1-31
  • Mes: 1-12
  • Día de la semana: 0-7 (0 o 7 es domingo)

En nuestra tarea, el script se ejecuta una vez por minuto, por lo que hay * asteriscos * allí.

También puede colocar el script en uno de cron directorios:

  • /cron.daily: para una secuencia de comandos que se ejecuta una vez al día
  • /cron.hourly: para un script que se ejecuta una vez por hora
  • /cron.monthly: para un script que se ejecuta una vez al mes
  • /cron.weekly: para una secuencia de comandos que se ejecuta una vez a la semana

Los scripts en los directorios especificados se ejecutarán de acuerdo con la programación automática.

Scripts de inicio de Bash: .bashrc

Si desea realizar algunas acciones al iniciar el SSH consola, puede agregar cualquier comando o secuencia de comandos a .bash_profile o .bashrc expediente. En teoría, puede agregar una acción en cualquiera de estos archivos, se ejecutará en cualquier caso. Por lo general, las cosas que necesita se agregan a .bashrc y .bashrc se inicia desde .bash_profile.

Agregué un comando para reiniciar el servicio web nginx en el archivo .bashrc:

service nginx restart

bashrc ejecutar script al inicio

Luego guardé el archivo y reinicié la sesión SSH:

Comandos de inicio de Bash

Como puede ver, al iniciar el terminal, también se ha reiniciado el servidor web. ¿Qué acciones se pueden realizar al iniciar el terminal? Pueden ser algunas herramientas adicionales, como tiempo de actividad verificación del servidor:

mostrar tiempo de actividad en ssh connect

O si desea acceder al directorio específico y comenzar mc al ejecutar la consola ssh, agregue lo siguiente a .bashrc:

cd /var/
mc

bashrc cambia el directorio y ejecuta el programa

Con suerte, este artículo sobre cómo administrar el servicio de Linux o el inicio de scripts en Linux le ha sido útil (este artículo fue escrito para CentOS y RHEL, pero adecuado para otras distos). Estoy seguro de que esta información será útil para las personas que estudian los conceptos básicos de la administración de sistemas Linux.

Recomendado para ti