Sistema V, systemd y Upstart

Controlar los servicios de Linux

Proceso init

El proceso init en los sistemas Linux es comúnmente conocido como la madre de todos los procesos. El proceso «init» siempre tendrá un ID de proceso de «1» (pid de 1), es el primer proceso iniciado por el kernel en su sistema. init es la abreviatura de inicialización y se utiliza para iniciar todos los demás procesos y su nivel de ejecución por defecto. Con el tiempo, muchas distribuciones han adoptado el estándar System V para la gestión de servicios, sin embargo, otras distribuciones se han movido a «Systemd» o «Upstart».

SysV – System V

Si su distribución de Linux utiliza los estándares «SysV», entonces init examinará un archivo llamado «/etc/inittab». Este archivo contiene su nivel de ejecución por defecto con el que el sistema debería arrancar. Por ejemplo «id:3:initdefault:» iniciaría automáticamente todos los scripts en las estructuras de directorios del nivel de ejecución 3.
Nivel de ejecución 1 – Modo de usuario único
Nivel de ejecución 2 – Igual que el nivel de ejecución 3, pero sin NFS
Nivel de ejecución 3 – Modo multiusuario y de red
Nivel de ejecución 4 – Sin usar
Nivel de ejecución 5 – Igual que el nivel de ejecución 3, pero con escritorio gráfico (sistema de ventanas X)
Para más información sobre el proceso de arranque: Arranque de Linux

Ejecución de scripts de init del «Sistema V»

Muy a menudo, como administrador, necesitarás parar, arrancar, reiniciar o recargar un servicio/demonio concreto. Para ello utilizamos un comando llamado «service». Este comando permite ejecutar scripts «System V» que normalmente se encuentran dentro del directorio «/etc/init.d». Además de poder arrancar y parar un servicio/daemon, también podemos ver el estado actual.

Ejemplos de comandos de service

Comprobación de estado: Aquí estamos solicitando el estado actual del demonio «sshd»

# service sshd statusopenssh-daemon (pid 1599) is running...

Comprobar el estado de todos los procesos: Ejecuta todos sus scripts init en orden alfabético con la opción de estado. A continuación se muestra un extracto de la salida de este comando:

# service --status-allabrt-ccpp hook is installedabrtd (pid 1708) is running...abrt-dump-oops (pid 1716) is running...acpid (pid 1487) is running...atd (pid 1740) is running...auditd (pid 1262) is running...automount (pid 1571) is running...avahi-daemon (pid 1375) is running...Usage: /etc/init.d/bluetooth {start|stop}certmonger (pid 1752) is running...cpuspeed is stoppedcrond (pid 1724) is running...cupsd (pid 1476) is running...dnsmasq is stoppedfirstboot is not scheduled to runhald (pid 1496) is running...

Stop: Aquí solicitamos que el demonio «sshd» se detenga. También se emitió la opción de estado para comprobar el nuevo estado.

# service sshd stopStopping sshd: # service sshd statusopenssh-daemon is stopped

Iniciar: Esta vez estamos solicitando que se inicie el «sshd».

# service sshd startStarting sshd: 

Restart: Esta vez vamos a «rebotar» el demonio «sshd» (parar y luego reiniciar inmediatamente).

# service sshd restartStopping sshd: Starting sshd: 

Recargar: La opción «reload» es muy útil si has hecho cambios en un archivo de configuración y quieres traer estos cambios.

# service sshd reloadReloading sshd: 

Upstart

Upstart es un reemplazo basado en eventos para el demonio «init». Upstart fue escrito por un antiguo empleado de la conocida empresa que nos proporciona Ubuntu (Canonical). La idea detrás de Upstart era alejarse del proceso de inicio tradicional en el que las tareas que se iniciaban tenían que completarse antes de que la siguiente tarea pudiera comenzar. Upstart es un sistema dirigido por eventos que le permite responder a los eventos del sistema de forma asíncrona. Upstart es responsable de iniciar y detener los servicios y tareas en el arranque y el apagado. También supervisa activamente estos servicios y tareas. Upstart también es capaz de ejecutar los scripts de sysvinit sin necesidad de modificarlos. Varias distribuciones han incluido Upstart como reemplazo de System V. Entre ellas se encuentran RHEL, CentOS y Fedora. Sin embargo, muchos de estos sistemas han pasado a «systemd»
Como vimos anteriormente, podemos controlar servicios/demones con el comando «service» bajo System V, sin embargo, bajo Upstart usamos un comando diferente. El comando que se utiliza con Upstart es «initctl». Este comando permite comunicarse con el demonio init. A continuación se muestran algunos ejemplos básicos del comando «initctl» en uso.

Ejemplos de comandos initctl

Comprobación de estado: Esta opción solicita el estado del trabajo especificado.

root@john-desktop:~# initctl status cupscups start/running, process 672

Se da primero el nombre del trabajo seguido del objetivo y estado actual de la instancia y luego el número de id del proceso.
Stop: La opción «stop» especifica que el estado deseado debe ser «parado».

root@john-desktop:~# initctl stop cupscups stop/waiting

Inicio: La opción «start» iniciará una nueva instancia del trabajo especificado.

root@john-desktop:~# initctl start cupscups start/running, process 3574

Restart: Esta opción reiniciará que el trabajo especificado se reinicie. La instancia que se reinicie conservará su configuración original.

root@john-desktop:~# initctl restart cupscups start/running, process 3606

Recargar: Esta opción recargará la instancia especificada.

root@john-desktop:~# initctl reload cups

Lista: List solicita que se muestren todos los trabajos/instancias y su estado asociado. A continuación se muestra un ejemplo de la salida de este comando:

root@john-desktop:~# initctl listavahi-daemon start/running, process 611mountall-net stop/waitingnmbd stop/waitingpasswd stop/waitingrc stop/waitingrsyslog start/running, process 601tty4 start/running, process 1080udev start/running, process 437upstart-udev-bridge start/running, process 429

Recargar configuración: Esta opción solicita que el demonio init recargue sus archivos de configuración. No se reinicia ningún trabajo con este comando.

root@john-desktop:~# initctl reload-configuration cups

En circunstancias normales, no debería necesitar emitir el comando de recarga anterior ya que «init» vigila sus directorios de configuración con «inotify» y se recarga automáticamente en caso de cambio.

systemd

systemd es otro reemplazo de System V. systemd significa demonio del sistema. Su nombre está intencionadamente en minúsculas. systemd fue diseñado para permitir un mejor manejo de las dependencias y tener la capacidad de manejar más trabajo en paralelo en el arranque. systemd soporta la toma de instantáneas de su sistema y la restauración del estado de sus sistemas, mantiene un seguimiento de los procesos almacenados en lo que se conoce como un «cgroup» en oposición al método convencional «PID». systemd ha sido adoptado por muchas distribuciones populares de Linux. Fedora, Mandriva, Mageia, Arch Linux. También hay planes para que systemd sea incluido en las nuevas versiones de RHEL (Red hat).
Como vimos con «System V» y «Upstart» ambos tipos tienen su propio comando único para controlar los servicios. Lo mismo ocurre con systemd. El comando que se utiliza bajo systemd es «systemctl». A continuación se muestran algunos ejemplos de algunas de las funcionalidades básicas del comando «systemctl».

Comando systemd

Descripción
systemctl start mytest.service Inicia el servicio especificado
systemctl stop mytest.service Detiene el servicio especificado
systemctl status mytest.service Pide el estado del servicio especificado
systemctl list-unit-files –type=service Lista los servicios conocidos que se pueden iniciar o detener
systemctl restart mytest.service Inicia y luego detiene el servicio especificado
systemctl reload mytest.service Si es compatible, recargará los archivos de configuración
systemctl enable mytest.service Equivalente a chkconfig mytest on systemctl disable mytest.service Equivalente a chkconfig mytest off systemctl is-enabled mytest.service Comprueba si el servicio está configurado para iniciarse en el nivel de ejecución actual

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *