Systemd for Kung fu ITs – PARTE I

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

Deja una respuesta