systemctl: La herramienta de control de systemd
El comando systemctl es la herramienta de administración central para controlar el sistema de inicio systemd. Vamos a ver como administrar servicios, verificar estados, cambiar estados de sistema y trabajar con los archivos de configuración.
El objetivo de la mayoría de las acciones que llevaremos a cabo con systemd son "unidades", que como vimos en la entrada anterior, se clasifican por el tipo de recurso que representan y se definen con archivos conocidos como archivos de unidad.
Para las tareas de administración de servicios, la unidad de destino será la de tipo service, que tiene el archivo de unidad con el sufijo .service. De todas formas, para la mayoría de los comandos de administración de servicios es posible dejar de lado el sufijo .service, ya que systemd es lo suficientemente inteligente como para saber que probablemente trata de operar sobre un servicio cuando use los comandos de administración de servicios. En algunos casos, por ejemplo en el caso de trabajar con un servicio activado por un socket, donde la unidad de servicio y la de socket tienen el mismo nombre, tenemos que indicar que trabajamos sobre el socket añadiendo el .socket o de lo contrario operará siempre sobre el servicio.
Es necesario trabajar con privilegios de administrador, por tanto utilizaremos sudo con el comando systemctl en caso de no trabajar como root directamente.
Habilitar/Deshabilitar unidades | Descripción |
systemctl enable nombre.service | Indica a systemd que inicie el servicio automáticamente en el arranque |
systemctl disable nombre.service | Deshabilita la unidad para el inicio automático durante el arranque del sistema |
Comprobar estado | Descripción |
systemctl status nombre.service | Muestra el estado del servicio, la jerarquía de cgroup y las primeras líneas de registro |
systemctl is-active nombre.service | Devuelve el estado de la unidad actual, que generalmente estará activa o inactiva. El código de salida será "0" si está activa y "1" en caso contrario. Esto facilita su uso en un script en suyo caso podemos añadir el parámetro --quiet para evitar que imprima también el estado de la unidad por la salida estándar |
systemctl is-enabled nombre.service | Indica si la unidad está habilitada o deshabilitada ("0" o "1") |
systemctl is-failed nombre.service | Indica si la unidad está en un estado fallido. Esto indica que hubo un problema al iniciar la unidad en cuestión |
Parar/Arrancar/Restaurar/Recargar | Descripción |
systemctl start nombre.service | Iniciar una unidad (en este caso el servicio nombre.service) |
systemctl stop nombre.service | Detiene la ejecución de una unidad |
systemctl restart nombre.service | Reinicia una unidad |
systemctl reload nombre.service | Recarga la configuración de un servicio, siempre y cuando la aplicación en cuestión sea capaz de volver a cargar sus archivos de configuración sin reiniciar |
systemctl reload-or-restart nombre.service | Recarga la configuración del servicio sin reiniciar en caso de que este disponible esta opción y de lo contrario reiniciará el servicio para que se recargue la nueva configuración |
Enmascarar/Desenmascarar unidades | Descripción |
systemctl mask nombre.service | Con esta opción, systemd tiene la capacidad de marcar una unidad como completamente deshabilitada. Esto se llama enmascarar la unidad e impide que podamos arrancar la unidad con systemctl start |
systemctl unmask nombre.service | Desenmascaramos la unidad, es decir liberamos la unidad para que pueda ser ejecutada |
Manejar/Editar unidades | Descripción |
systemctl cat nombre.service | Muestra el fichero de configuración de la unidad (como ejecutar cat nombre.service en la carpeta donde se encuentre la unidad) |
systemctl list-dependencies nombre.service | Nos mostrará un árbol con la jerarquía de las dependencias que deben tratarse para iniciar la unidad en cuestión. Las dependencias, aquí incluyen aquellas unidades que son requeridas directamente o por unidades por encima de ella |
systemctl show nombre.service | Muestra las propiedades de bajo nivel de una unidad. Podemos elegir la propiedad concreta a mostrar con la opción -p propiedad |
systemctl edit nombre.service |
Abre un fichero de configuración para la unidad en el editor por defecto. Este será un archivo en blanco que se puede usar para anular o agregar directivas a la definición de la unidad. Se creará un directorio dentro del directorio /etc/systemd/system que contiene el nombre de la unidad con .d anexado. Por ejemplo, para nombre.service, se creará un directorio llamado nombre.service.d |
systemctl edit --full nombre.service | Editamos el archivo de configuración de la unidad en el editor por defecto (es el editor por defecto de root, aunque lo ejecutemos con sudo desde otro usuario). Podemos cambiar el editor por defecto de root con: "sudo update-alternatives --config editor" |
systemctl daemon-reload | Recarga la configuración de los ficheros de unidad (necesario después de editar, cambiar o borrar algún fichero de configuración de unidad) |
Detener/Reiniciar systema | Descripción |
systemctl halt | Termina todos los procesos y apaga la CPU |
systemctl poweroff | Como halt, pero también apaga la unidad en sí misma (envía un comando ACPI a la placa, luego a la PSU, para cortar la alimentación). Existe definido un alias y es posible ejecutar directamente sudo poweroff |
systemctl reboot | Reinicia el equipo. Existe definido un alias y es posible ejecutar directamente sudo reboot |
systemctl rescue | Pone el sistema en modo rescue (usuario único) |
Como vemos el comando systemctl nos permite realizar las tareas básicas de mantenimiento de las unidades así como parar y reiniciar el sistema. En la próxima entrega veremos como monitorizar los logs con journalctl.