Systemd – Configuración de servicios en RHEL7

La histórica configuración de /etc/init.d se está quedando obsoleta y en RedHat 7 / Centos 7 debemos utilizar systemctl (systemd) para personalizar aquellos procesos que queramos que arranquemos con el boot del sistema.

Configurar systemctl es muy sencillo. De hecho, creé un script para arrancar el Apache que hace que funcione este blog. Lo hice asi:

Configuración de un servicio básico con systemd

[[email protected] ~]# cat /usr/lib/systemd/system/httpd_puerto53.service
[Unit]
Description=Apache puerto53
After=network.target remote-fs.target nss-lookup.target

[Service]
ExecStart=/app/puerto53/scripts/Apache/apache_puerto53.sh start
ExecStop=/app/puerto53/scripts/Apache/apache_puerto53.sh stop
Type=forking
PIDFile=/app/puerto53/httpd/run/httpd/httpd.pid

[Install]
WantedBy=multi-user.target
[[email protected] ~]#

Arranque del servicio

Veamos cómo funciona:

[[email protected] system]# systemctl enable httpd_puerto53.service
[[email protected] system]# systemctl start httpd_puerto53.service
[[email protected] system]# ps -ef |grep -i http
root 4732 1 0 12:28 ? 00:00:00 /usr/bin/sh /etc/init.d/httpd_puerto53 start
root 4734 1 1 12:28 ? 00:00:00 httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
puerto53 4736 4734 0 12:28 ? 00:00:00 httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
puerto53 4737 4734 0 12:28 ? 00:00:00 httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
puerto53 4738 4734 0 12:28 ? 00:00:00 httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
puerto53 4739 4734 0 12:28 ? 00:00:00 httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
puerto53 4740 4734 0 12:28 ? 00:00:00 httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
puerto53 4741 4734 0 12:28 ? 00:00:00 httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
puerto53 4742 4734 0 12:28 ? 00:00:00 httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
puerto53 4743 4734 0 12:28 ? 00:00:00 httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
puerto53 4744 4734 0 12:28 ? 00:00:00 httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
puerto53 4745 4734 0 12:28 ? 00:00:00 httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
puerto53 4746 4734 0 12:28 ? 00:00:00 httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
puerto53 4747 4734 0 12:28 ? 00:00:00 httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
puerto53 4748 4734 0 12:28 ? 00:00:00 httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
puerto53 4749 4734 0 12:28 ? 00:00:00 httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
puerto53 4750 4734 0 12:28 ? 00:00:00 httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
puerto53 4751 4734 0 12:28 ? 00:00:00 httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
root 4756 2794 0 12:28 pts/0 00:00:00 grep –color=auto -i http

Comprobar el estado del servicio


[[email protected] system]# systemctl status httpd_puerto53.service
● httpd_puerto53.service – Apache puerto53
Loaded: loaded (/etc/systemd/system/httpd_puerto53.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Thu 2018-08-16 12:28:46 CEST; 4s ago
Process: 4760 ExecStop=/etc/init.d/httpd_puerto53 stop (code=exited, status=0/SUCCESS)
Process: 4732 ExecStart=/etc/init.d/httpd_puerto53 start (code=exited, status=0/SUCCESS)
Main PID: 4732 (code=exited, status=0/SUCCESS)

Aug 16 12:28:41 prt53ws1 systemd[1]: Started Apache puerto53.
Aug 16 12:28:41 prt53ws1 systemd[1]: Starting Apache puerto53…
Aug 16 12:28:46 prt53ws1 httpd_puerto53[4732]: 4734 (process ID) old priority 0, new priority -19
[[email protected] system]#

Script de arranque y parada del servicio

Ya que estamos, os enseño el script que utilizo para parar y arrancar apache:

[[email protected] ~]# cat /app/puerto53/scripts/Apache/apache_puerto53.sh
#!/usr/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

if [ $1 == «start» ]
then


 
httpd -f /app/puerto53/httpd/conf/httpd.conf -k start -D SSL
sleep 5
PID=`cat /app/puerto53/httpd/run/httpd/httpd.pid`
/usr/bin/renice -n -19 $PID

elif [ $1 == «stop» ]
then

httpd -f /app/puerto53/httpd/conf/httpd.conf -k stop

fi
[[email protected] ~]#

Entendiendo el funcionamiento de Systemd

Sección Service

  • Directiva Type:
    • simple: El proceso principal del servicio se especifica en la línea de inicio. Este es el valor por defecto si las directivas «Type=» y «Busname=» no están establecidas, pero el «ExecStart=» sí lo está.
    • forking: Este tipo de servicio se utiliza cuando se crea un proceso hijo. Esto le dice a systemd que el proceso sigue ejecutándose aunque el padre haya salido.
    • oneshot: Este tipo indica que el proceso durará poco tiempo y que el sistema debe esperar a que el proceso salga antes de continuar con otras unidades.
    • dbus: Algunas aplicaciones necesitan conectarse entre sí mediante el protocolo D-BUS.
    • notify: El servicio enviará una notificación cuando haya terminado de ponerse en marcha. El sistema esperará antes de continuar con el arranque de otros servicios.
    • idle: El servicio no funcionará hasta la finalización de todos los trabajos.
  • Directivas relacionadas con la ejecución de los procesos:
    • ExecStart: Indicamos el proceso que va a iniciar el servicio.
    • ExecStartPre: Antes de la ejecución del proceso inicial, ejecutamos otros comandos.
    • ExecStartPost: Al finalizar el proceso, ejecutamos otros comandos.
    • ExecReload: Volvemos a leer la configuración del servicio
    • ExecStop: Especificamos el comando para finalizar el proceso.
    • ExecStopPost: Ejecutamos algunos comandos después de finalizar el proceso.
    • Restart: Indicamos las circunstancias en que systemd reiniciará el proceso automáticamente: “always”, “on-success”, “on-failure”, “on-abnormal”, “on-abort”, or “on-watchdog”.
    • TimeoutSec: Especificamos el tiempo máximo que Systemd esperará antes de parar el servicio si ha sido marcado como «failed» o «forcefully killing it».
  • Directivas adicionales:
    • RemainAfterExit: Se suele utilizar conjuntamente con oneshot. Indica que el proceso debería ser considerado en ejecución, incluso, si ha devuelto un código de salida.
    • PIDFile: Si el servicio es de tipo forking el PID del proceso se almacenará en el fichero indicado en esta directiva.
    • BusName: Utilizaremos esta directiva para indicar el nombre del bus (D-BUS) al que se asociará el proceso cuando arranque.
    • NotifyAccess: Especificamos el acceso al socket que se debe usar para escuchar las notificaciones cuando se selecciona el tipo de servicio «notify». Este puede ser «none», «main» o «all». El valor predeterminado «none», ignora todos los mensajes de estado. La opción «main» escucha los mensajes del proceso principal y la opción «all» escucha todos los procesos del servicio.

Sección Socket

  • Las directivas más utilizadas:
    • ListenStream: Define una dirección TCP/IP para poder establecer una comunicación por red con el servicio.
    • ListenDatagram: Los servicios UDP utilizan este tipo de comunicación.
    • ListenSequentialPacket: Define la dirección de red para una comunicación secuencial. Si el dato enviado por red es muy grande, se envían varios paquetes de manera secuencial.
    • ListenFIFO: FiFo proviene de First In First Out o, lo primero que llega es lo primero que sale. Muchas aplicaciones utilizan este tipo de comunicación. Podemos definir un buffer de este tipo en vez de un socket.
  • Directivas de control de las comunicaciones:
    • Accept: Podemos definir si todas las comunicaciones las administrará una sola instancia o crearemos nuevas para repartir el tráfico entre ellas.
    • SocketUser: Definimos el usuario propietario del socket. Por defecto es el root.
    • SocketGroup: Definimos el grupo propietario del socket. Por defecto es root.
    • SocketMode: Definimos los permisos (de UNIX) para el socket.
    • Service: Podemos definir un nombre del servicio para el socket (MiServicio.socket).

Sección Mount

Mount está relacionado con los puntos de montaje de los filesystems, tal y como podemos ver en el fichero /etc/fstab.

  • What: Indicamos el path del recurso que vamos a montar.
  • Where: Especificamos dónde vamos a montar el recurso (punto de montaje).
  • Type: Indicamos el tipo de filesystem. Por ejemplo, XFS.
  • Options: Opciones de montaje. Cada opción se separará con una coma.
  • SloppyOptions: Si está definido como true y hay una opción de montaje incorrecta, él recurso se montará igualmente con las opciones de montaje por defecto.
  • DirectoryMode: Si se necesitan crear directorios para poder montar el filesystem, indicaremos con qué permisos se crearán.
  • TimeoutSec: Especificamos el tiempo máximo de espera para montar el filesystem.

Sección Automount

Las dos únicas directivas importantes son Where y DirectoryMode, que ya hemos visto anteriormente.

Sección Swap

Las unidades o servicios de swap se configuran para montar filesystems de swap en el sistema. Lo podemos hacer mediante la configuración del fichero /etc/fstab o con la llamada de una unidad o servicio de systemd.

Las directivas relacionadas con esta sección son:

  • What: Indicamos el path absoluto del recurso de swap.
  • Priority: Definimos la prioridad con la que el espacio de swap debe ser creado.
  • Options: Especificamos las opciones de montaje del swap, separadas por comas.
  • TimeoutSec: El tiempo de espera en segundos para montar el swap antes de dar la operación por fallada.

Sección Path

Una unidad path se define para que Systemd pueda monitorizar los cambios o la actividad de un path del sistema. Debe existir otra unidad que se activará cuando se detecten cierta actividad. La actividad del path se notifica mediante eventos inotify.

Directivas de esta sección:

  • PathExists: Revisa si el path indicado existe.
  • PathExistsGlob: Igual que la anterior directiva pero soporta expresiones glob.
  • PathChanged: La unidad asociada se activa si se detecta algún cambio.
  • PathModified: Igual que la directiva anterior pero actúa en las escrituras en los archivos o cuando se ha cerrado uno.
  • DirectoryNotEmpty: Activa la unidad asociada cuando el directorio ya no está vacío.
  • Unit: Se especifica la unidad que se activará.
  • MakeDirectory: Definimos si Systemd creará la estructura de directorios antes de monitorizarla.
  • DirectoryMode: Si la directiva anterior está habilitada, configuraremos los permisos de los directorios creados.

Sección Timer

Podemos crear unidades o servicios que complementan a las tareas configuradas en cron para programar tareas o ejecutarlas si van con retraso.

  • OnActiveSec: Permite que la unidad asociada se active en relación con la activación de la unidad .timer.
  • OnBootSec: Especificamos el tiempo que pasará para que se active la unidad asocidad después de que el sistema se inicie.
  • OnStartUpSec: Similar al anterior pero se ejecuta unos segundos después de que el servicio Systemd se haya iniciado.
  • OnUnitActiveSec: Se configura un temporizador en relación a la última vez en que la unidad asociada fue ejecutada.
  • UnitInactiveSec: Se configura un temporizador en relación a la última vez en que la unidad asociada se marcó como inactiva.
  • OnCalendar: Podemos definir una fecha y hora exactas para ejecutar la unidad asociada.
  • AccuracySec: Especificamos la precisión del temporizador. Por ejemplo, la unidad asociada se activará en un plazo de un minuto desde que se alcanza el temporizador.
  • Unit: Indicamos la unidad que debe ser activada cuando alcancemos el temporizador.
  • Persistent: Si se configura, systemd activará la unidad asociada cuando el temporizador se active si se hubiera activado durante el período en que el temporizador estuvo inactivo.
  • WakeSystem: Permite despertar un sistema de suspensión si se alcanza el temporizador cuando está en ese estado.

¿Te ha gustado? ¡Compártelo!

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email

SUSCRÍBETE A PUERTO53

Recibe un email periódico con los artículos más interesantes de Puerto53.com

Antes de suscribirte lee los términos y condiciones. Gracias.

Contenido Relacionado

Este es un blog de informática. ¿Qué necesita un informático?

Portátiles

Lenovo IdeaPad 3 - Ordenador Portátil 15.6" FullHD (Intel Core i5-1035G1, 8GB RAM, 256GB...
  • Pantalla de 15.6" FullHD 1920x1080 píxeles, TN, 220nits
  • Procesador Intel Core i5-1035G1 (4C / 8T, 1.0 / 3.6GHz, 6MB)
  • Memoria RAM de 8GB
Rebajas
ASUS ZenBook 14 UM431DA-AM022 - Portátil de 14" FullHD (Ryzen 7 3700U, 16GB RAM, 512GB...
  • Pantalla de 14" FullHD (1920x1080)
  • Procesador Ryzen 7-3700U
  • Memoria RAM de 16GB (16GB en placa) DDR4 2400MHz
Rebajas
Huawei Matebook D15 - Ordenador Portátil de 15.6'' FullHD (AMD Ryzen 5 3500u,...
  • El portátil Huawei Matebook D15 cuenta con una pantalla Fullview de 15.6 pulgadas y tiene un grosor de 16.9 mm
  • Con una arquitectura potente y un software de grandes capabilidades, ofrece el mayor tamaño de pantalla y el peso más reducido para un equipo de estas...
  • La tecnología multi-screen collaboration fácilita en gran medida la interacción con otros dispositivos, permitiendo proyectar la pantalla de tu móvil...

Monitores PC

HP 22w - Monitor 21.5" (Full HD, 1920 x 1080 pixeles, tiempo de respuesta de 5 ms, 1 x...
  • Regálale a tu escritorio un toque de elegancia
  • Esta pantalla IPS de 53.61 cm (21,5 pulgadas) en diagonal dispone de 178 ángulos de visualización para ofrecer una experiencia de entretenimiento...
  • Con los puertos VGA y HDMI, esta pantalla hace que conectar tu ordenador portátil o pc de sobremesa sea una tarea sencilla y fluida
Philips 243V7QDSB/00 - Monitor IPS de 24" (Full HD, 1920x1080, Sin bordes, Flicker Free,...
  • Esta pantalla cuenta con una resolución full hd de 1920 x 1080
  • Los led blancos son dispositivos de estado sólido que se iluminan completamente, con un brillo constante y un tiempo de inicio de ahorro de energía más...
  • Las nuevas pantallas philips tienen bordes ultra estrechos que permiten reducir al mínimo las distracciones y maximizar el tamaño de visualización
Rebajas
Lenovo L22e-20 21.5 " FHD VA FreeSync Gaming Monitor 4 ms VGA+HDMI 3 lados sin bordes -...
  • 21.5" Full HD VA: Esta pantalla VA de 21.5" pulgadas ofrece una experiencia de usuario fantástica e imágenes nítidas y óptimas gracias a su resolución...
  • Diseño elegante: Este monitor ergonómico casi sin bordes dispone de la tecnología TUV Low Blue Light para cuidar tu vista y regalarte una experiencia...
  • 4 ms: Atrévete a jugar con este monitor, tendrás una imagen más fluida gracias a su tiempo de respuesta de 4 ms

NAS

Synology Diskstation DS218+ - Memoría externa DS218+ NAS 2bay
  • Procesador de doble núcleo con aceleración de cifrado AES-NI
  • No lleva disco
  • Admite la transcodificación 4K en tiempo real
Rebajas
Western Digital My Cloud Home - Almacenamiento En Red NAS de 3 TB, 1 Bahía, Blanco y...
  • Configuración sencilla y rápida desde el teléfono
  • Acceso desde cualquier lugar con la aplicación para móviles o para ordenadores de My Cloud Home, o bien desde MyCloud.com
  • Copia de seguridad automática de las fotos y los vídeos del teléfono
Synology diskstation ds120j.
  • Almacenamiento de 1 bahía fácil de usar en una nube personal para usuarios de nas inexpertos
  • Rendimiento secuencial más de 112 mb/s de lectura, 106 mb/s de escritura
  • Plataforma para compartir archivos y sincronización entre dispositivos
Rebajas
WD 4TB My Cloud EX2 Ultra Almacenamiento en Red
  • Almacenamiento en red centralizado y acceso desde cualquier lugar
  • Equipado con My Cloud OS 3
  • Sincronización automática de archivos en todos sus ordenadores

Deja un comentario

About Author