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:
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
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
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
Luego guardé el archivo y reinicié la sesión SSH:
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:
O si desea acceder al directorio específico y comenzar mc al ejecutar la consola ssh, agregue lo siguiente a .bashrc:
cd /var/
mc
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.