Hola!,
Antes que nada bienvenidos. Hoy vamos a ver una serie de publicaciónes que nos mostrarán rápidamente como utilizar Systemd. Pero lo que les propongo es dejar de lado la teoría. Como el título lo explica, iremos directo al grano, nada de medias tintas, directo al «codo codo piña patada» a la acción… ITs Kung fu style!. Aviso pequeño saltamontes…. probar esto primero en una VM por favor.
Previamente, en SysV, los scripts se encontraban dentro de /etc/rc.d. Estos scripts estaban escritos típicamente en bash y permitían al administrador controlar el estado de los servicios o dameons en sus sistema. En SystemD, estos scripts son reemplazados por algo llamado service units.
Estas terminan con un “.service” como extensión; pero muy hábilmente vamos a poder referirnos a estas sin utilizar dicha extensión. Por ejemplo, esto:
# systemctl restart rsyslog
# systemctl restart rsyslog.service
-
Listando servicios
Si quisiéramos listar las service units, tipeamos lo siguiente en el shell prompt:
# systemctl list-units –type service
Pot cada service unit, este comando despliega el full name (UNIT) seguido de una nota donde dice si la unidad ha sido cargada (LOAD) su estado high-level (ACTIVE) y low-level (SUB) seguido de una descripción (DESCRIPTION). Pero si quisieramos mostrar solamente las servie units y ver si estan activadas o no:
# systemctl list-unit-files –type service
Por cada service unit, este comando despliega el nombre (UNIT FILE) seguido de la información de si el servicio estña activo ono. Si quisiera desplegar el status de un servicio:
# systemctl status rsyslog
| rsyslog.service – System Logging Service
Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled)
Active: active (running) since Wed 2016-03-16 10:54:27 ART; 16min ago
Docs: man:rsyslogd(8)
http://www.rsyslog.com/doc/
Main PID: 4940 (rsyslogd)
CGroup: /system.slice/rsyslog.service
–4940 /usr/sbin/rsyslogd -n
Despliega la siguiente información:
Pero si solo me interesa saber si ese servicio específico se encuentra corriendo:
# systemctl is-active rsyslog
active
Ahora, si quiero sabe si ese servicio se activa al inicio:
# systemctl is-enabled rsyslog
enabled
Si quisiera lustar que servicios están ordeados para iniciar antes que un servicios específico, ejecutamos el siguiente comando:
# systemctl list-dependencies –after rsyslog
rsyslog.service
| –syslog.socket
| –system.slice
| –basic.target
| –systemd-ask-password-plymouth.path
| –paths.target
| | –acpid.path
Lo mismo para ver que servicios dependen de él
# systemctl list-dependencies –before rsyslog
-
Iniciando, parando, reinciando un servicio
Esto es lo más simple. Por ejemplo con rsyslog.service
# systemctl start rsyslog
# systemctl stop rsyslog
# systemctl restart rsyslog
El último comando lo inicia inclusive si el servicio esta stoppeado; pero si quisiéramos restartear solo si el servicio está corriendo:
# systemctl try-restart rsyslog
Reload para recargar las configuraciones
# systemctl reload rsyslog
-
Activando servicio al inicio
Si quisiéramos configurar un service unit que se inicie al momento del boot, debemos ejecutar:
# systemctl enable rsyslog
Synchronizing state for rsyslog.service with sysvinit using update-rc.d…
Executing /usr/sbin/update-rc.d rsyslog defaults
Executing /usr/sbin/update-rc.d rsyslog enable
Este comando lee la sección [Install] del servicio del archivo /lib/systemd/system/rsyslog.service y crea los links simbólicos a la carpeta /etc/systemd/system/ con sus sub directorios. Este comando, lo que no hace, es reescribir links que existan. Si queremos asegurarnos que el link es recreado:
# systemctl reenable rsyslog
-
Desactivando el servicio
Para prevenir que un servicio sea activado automáticamente durante el boot, tipear:
# systemctl disable rsyslog
Esto, en contraparte, remueve el link. Se puede enmascarar el servicio para prevenir el inicio manual, o de otro servicio que lo inicie:
# systemctl mask rsyslog
Esto hace un link simbólico a /dev/null, por loque si intentamos iniciarlo:
# systemctl start rsyslog
Failed to start rsyslog.service: Unit rsyslog.service is masked.
Para desenmascararlo:
# systemctl unmask rsyslog