Introducción
En los últimos años, las distribuciones de Linux han transitado cada vez más de otros sistemas init a systemd
. La suite de herramientas systemd
proporciona un modelo de inicio rápido y flexible para administrar una máquina entera desde el arranque en adelante.
En esta guía, te daremos un breve recorrido por los comandos más importantes que querrás conocer para administrar un servidor habilitado para systemd
. Estos deberían funcionar en cualquier servidor que implemente systemd
(cualquier versión de SO en o superior a Ubuntu 15.04, Debian 8, CentOS 7, Fedora 15). Empecemos.
Administración Básica de Unidades
El objeto básico que systemd
administra y actúa sobre es una “unidad”. Las unidades pueden ser de muchos tipos, pero el tipo más común es un “servicio” (indicado por un archivo de unidad que termina en .service
). Para administrar servicios en un servidor habilitado para systemd
, nuestra principal herramienta es el comando systemctl
.
Todos los comandos normales del sistema init tienen acciones equivalentes con el comando systemctl
. Utilizaremos la unidad nginx.service
para demostrarlo (tendrás que instalar Nginx con tu administrador de paquetes para obtener este archivo de servicio).
Por ejemplo, podemos iniciar el servicio escribiendo:
Podemos detenerlo nuevamente escribiendo:
Para reiniciar el servicio, podemos escribir:
Para intentar recargar el servicio sin interrumpir la funcionalidad normal, podemos escribir:
Activar o Desactivar Unidades
Por defecto, la mayoría de los archivos de unidad de systemd
no se inician automáticamente en el arranque. Para configurar esta funcionalidad, es necesario “habilitar” la unidad. Esto la conecta a un determinado “objetivo” de arranque, lo que provoca que se active cuando se inicia ese objetivo.
Para habilitar un servicio para que se inicie automáticamente en el arranque, escriba:
Si desea desactivar nuevamente el servicio, escriba:
Obteniendo una Visión General del Estado del Sistema
Hay una gran cantidad de información que podemos obtener de un servidor systemd
para obtener una visión general del estado del sistema.
Por ejemplo, para obtener todos los archivos de unidad que systemd
ha listado como “activos”, escriba (en realidad puede omitir el list-units
ya que este es el comportamiento predeterminado de systemctl
):
Para listar todas las unidades que systemd
ha cargado o intentado cargar en memoria, incluyendo aquellas que no están actualmente activas, añade el interruptor --all
:
Para listar todas las unidades instaladas en el sistema, incluyendo aquellas que systemd
no ha intentado cargar en memoria, escribe:
Visualización de Información Básica de los Registros
A systemd
component called journald
collects and manages journal entries from all parts of the system. This is basically log information from applications and the kernel.
Para ver todas las entradas de registros, comenzando por la entrada más antigua, escribe:
Por defecto, esto te mostrará entradas de los arranques actual y anterior si journald
está configurado para guardar registros de arranques anteriores. Algunas distribuciones habilitan esto por defecto, mientras que otras no (para habilitarlo, edita el archivo /etc/systemd/journald.conf
y establece la opción Storage=
en “persistent”, o crea el directorio persistente escribiendo sudo mkdir -p /var/log/journal
).
Si solo deseas ver las entradas del diario del arranque actual, añade la bandera -b
:
Para ver solo los mensajes del kernel, como los que típicamente representa dmesg
, puedes usar la bandera -k
:
De nuevo, puedes limitar esto solo al arranque actual añadiendo la bandera -b
:
Consulta de Estados de Unidades y Registros
Mientras que los comandos anteriores te dieron acceso al estado general del sistema, también puedes obtener información sobre el estado de unidades individuales.
Para ver un resumen del estado actual de una unidad, puedes usar la opción status
con el comando systemctl
. Esto te mostrará si la unidad está activa, información sobre el proceso y las últimas entradas del diario:
Para ver todas las entradas del diario para la unidad en cuestión, proporciona la opción -u
con el nombre de la unidad al comando journalctl
:
Como siempre, puedes limitar las entradas al arranque actual agregando la bandera -b
:
Inspeccionando Unidades y Archivos de Unidad
En este momento, sabes cómo modificar el estado de una unidad iniciándola o deteniéndola, y sabes cómo ver información de estado y diario para tener una idea de lo que está sucediendo con el proceso. Sin embargo, aún no hemos visto cómo inspeccionar otros aspectos de las unidades y archivos de unidad.
A unit file contains the parameters that systemd
uses to manage and run a unit. To see the full contents of a unit file, type:
Para ver el árbol de dependencias de una unidad (qué unidades intentará activar systemd
al iniciar la unidad), escribe:
Esto mostrará las unidades dependientes, con las unidades target
expandidas de manera recursiva. Para expandir todas las unidades dependientes de forma recursiva, pasa la bandera --all
:
Finalmente, para ver los detalles de bajo nivel de la configuración de la unidad en el sistema, puedes usar la opción show
:
Esto te dará el valor de cada parámetro que está siendo gestionado por systemd
.
Modificación de Archivos de Unidad
Si necesitas hacer una modificación a un archivo de unidad, systemd
te permite hacer cambios desde el propio comando systemctl
para que no tengas que ir a la ubicación real del disco.
Para agregar un fragmento de archivo de unidad, que se puede usar para añadir o sobrescribir configuraciones en el archivo de unidad predeterminado, simplemente llama a la opción edit
en la unidad:
Si prefieres modificar todo el contenido del archivo de unidad en lugar de crear un fragmento, pasa la bandera --full
:
Después de modificar un archivo de unidad, debes recargar el proceso de systemd
para que recoja tus cambios:
Uso de Targets (Niveles de ejecución)
Otra función de un sistema init es transicionar el servidor mismo entre diferentes estados. Los sistemas init tradicionales típicamente se refieren a estos como “niveles de ejecución”, permitiendo que el sistema esté solo en un nivel de ejecución en cualquier momento.
En systemd
, en cambio, se utilizan “targets”. Los targets son básicamente puntos de sincronización que el servidor puede usar para llevarlo a un estado específico. Los archivos de servicio y otras unidades pueden estar vinculados a un target y múltiples targets pueden estar activos al mismo tiempo.
Para ver todos los targets disponibles en su sistema, escriba:
Para ver el target predeterminado que systemd
intenta alcanzar al arrancar (lo que a su vez inicia todos los archivos de unidad que componen el árbol de dependencias de ese target), escriba:
Puede cambiar el target predeterminado que se utilizará al arrancar usando la opción set-default
:
Para ver qué unidades están vinculadas a un target, puede escribir:
Puede modificar el estado del sistema para transicionar entre targets con la opción isolate
. Esto detendrá cualquier unidad que no esté vinculada al target especificado. Asegúrese de que el target que está aislado no detenga ningún servicio esencial:
Deteniendo o Reiniciando el Servidor
Para algunos de los estados principales a los que puede transicionar un sistema, hay atajos disponibles. Por ejemplo, para apagar su servidor, puede escribir:
Si deseas reiniciar el sistema en su lugar, eso se puede lograr escribiendo:
Puedes arrancar en modo de rescate escribiendo:
Ten en cuenta que la mayoría de los sistemas operativos incluyen alias tradicionales para estas operaciones, de modo que simplemente puedes escribir sudo poweroff
o sudo reboot
sin el systemctl
. Sin embargo, esto no está garantizado en todos los sistemas.
Siguientes Pasos
Para este punto, deberías conocer los conceptos básicos de cómo administrar un servidor que utiliza systemd
. Sin embargo, hay mucho más por aprender a medida que tus necesidades se expanden. A continuación, se presentan enlaces a guías con información más detallada sobre algunos de los componentes que discutimos en esta guía:
- Cómo Usar Systemctl para Gestionar Servicios y Unidades de Systemd
- Cómo Usar Journalctl para Ver y Manipular los Registros de Systemd
- Entendiendo las Unidades y Archivos de Unidad de Systemd
Al aprender a aprovechar las fortalezas de tu sistema de inicio, puedes controlar el estado de tus máquinas y gestionar más fácilmente tus servicios y procesos.