← Terminal y Línea de Comandos en Linux Bloque 8 · Paquetes y estado del sistema · Tema 39 de 43

Tema 39

Servicios y registros

De los casi trescientos procesos que mostraba top en el tema 32, lanzaste tú una decena. Los demás arrancaron solos, antes de que iniciaras sesión, y siguen ahí: el que mantiene la red, el que ejecuta las tareas programadas, el que instala las actualizaciones de seguridad, el que anota lo que ocurre. No tienen ventana ni terminal, y nadie los ve hasta que uno falla. Este tema trata de ellos, y de la única manera que tienen de comunicarse: escribiendo. Aprendemos a gobernarlos con systemctl y a leer lo que dicen con journalctl, que es, al final, la habilidad que separa adivinar de diagnosticar.

1. Servicios, systemd y unidades

Un servicio, o demonio, es un programa que se ejecuta en segundo plano de manera permanente, sin terminal ni usuario que lo atienda, a la espera de trabajo: una conexión que llega, una hora que se cumple, un dispositivo que se conecta.

En el tema 33 aprendimos a dejar un programa en segundo plano con & y con nohup, y dijimos que eran soluciones de emergencia. Un servicio necesita más que sobrevivir al cierre de la terminal: debe arrancar solo con la máquina, en el orden correcto respecto de otros, volver a arrancar si se cae, y dejar constancia de lo que hace. De todo eso se ocupa un único programa.

systemd es el primer proceso que el kernel pone en marcha, el de PID 1, y el administrador de todo lo demás: inicia los servicios al arrancar, los supervisa mientras funcionan, los detiene al apagar y recoge sus mensajes. Cada cosa que administra se llama unidad.

Lo vimos en la raíz del árbol de procesos del tema 32. Lo usan Ubuntu, Debian, Fedora, Red Hat, Arch y openSUSE, de modo que este tema, como el 37 y el 38, vale para casi todas las distribuciones. Las unidades son de varias clases, que se distinguen por el sufijo de su nombre:

SufijoLa unidad representaEjemplo
.serviceUn servicio: un programa que systemd inicia y supervisa.cron.service
.timerUn temporizador, que activa un servicio a ciertas horas.apt-daily.timer
.socketUn punto de conexión: el servicio arranca cuando alguien se conecta.ssh.socket
.mountUn sistema de archivos montado. Las líneas de /etc/fstab se convierten en unidades de este tipo.boot-efi.mount
.targetUn grupo de unidades, que marca una etapa del arranque.multi-user.target

Las del primer tipo son las que interesan, y por eso systemctl permite omitir el sufijo: cron se entiende como cron.service. systemctl, de system control, es el comando con que se le dan órdenes a systemd, y journalctl, el que lee los mensajes que systemd recoge. Son los dos comandos del tema.

Como ejemplo usaremos cron, el servicio que ejecuta las tareas programadas. Está en todos los sistemas, y detenerlo un minuto no causa ningún problema.

2. systemctl status: la ficha de un servicio

Lo usamos como ejemplo de subcomando en el tema 3, sin explicarlo. Es el comando más útil del tema, y no requiere sudo.

terminal
$ systemctl status cron
● cron.service - Regular background program processing daemon
     Loaded: loaded (/usr/lib/systemd/system/cron.service; enabled; preset: enabled)
     Active: active (running) since Tue 2026-10-13 08:29:14 -03; 2h 31min ago
       Docs: man:cron(8)
   Main PID: 842 (cron)
      Tasks: 1 (limit: 9264)
     Memory: 1.1M (peak: 4.6M)
        CPU: 312ms
     CGroup: /system.slice/cron.service
             └─842 /usr/sbin/cron -f -P

oct 13 08:29:14 equipo systemd[1]: Started cron.service - Regular background program processing daemon.
oct 13 08:29:14 equipo cron[842]: (CRON) INFO (pidfile fd = 3)
oct 13 08:29:14 equipo cron[842]: (CRON) INFO (Running @reboot jobs)
oct 13 09:17:01 equipo CRON[5121]: (root) CMD (cd / && run-parts --report /etc/cron.hourly)
oct 13 10:17:01 equipo CRON[6340]: (root) CMD (cd / && run-parts --report /etc/cron.hourly)
LíneaInforma
La primeraEl nombre de la unidad y su descripción. El punto de la izquierda cambia de forma y de color con el estado.
LoadedDe qué archivo se leyó la definición, y si el servicio está habilitado para arrancar con el sistema.
ActiveEl estado actual, y desde cuándo.
DocsDónde está su documentación: aquí, man 8 cron.
Main PIDEl proceso principal del servicio.
Tasks, Memory, CPUCuántos procesos e hilos tiene, cuánta memoria ocupa y cuánto procesador lleva consumido.
CGroupEl árbol de todos los procesos que pertenecen al servicio.
Las últimasSus mensajes más recientes en el registro.

En una pantalla está casi todo lo que se puede preguntar de un servicio: si funciona, desde cuándo, con qué procesos, cuánto consume y qué fue lo último que dijo. Las dos palabras resaltadas responden dos preguntas distintas, que conviene no confundir y que retomamos en la sección 6: active dice que está funcionando ahora; enabled, que arrancará solo en el próximo inicio.

La línea CGroup muestra algo que ps no puede: systemd coloca cada servicio en un grupo propio, y sabe en todo momento qué procesos le pertenecen, aunque el servicio haya lanzado hijos y nietos. Por eso puede detenerlos a todos sin dejar ninguno suelto.

Si la salida ocupa más que la pantalla, systemctl la muestra con el paginador less, y se sale con q. Con --no-pager escribe todo de una vez, y con -n 20 se eligen cuántas líneas de registro mostrar.

3. Los estados, y las preguntas de sí o no

La línea Active lleva dos palabras: el estado general y, entre paréntesis, el detalle.

SímboloEstadoSignifica
● verdeactive (running)El servicio está en ejecución. Es el estado normal de un demonio.
● verdeactive (exited)Hizo su tarea y terminó bien. Es normal en servicios que configuran algo al arrancar y no dejan un proceso.
● verdeactive (waiting)Espera un evento. Es el estado habitual de un temporizador.
○ blancoinactive (dead)Está detenido. No es un error: nadie lo inició, o alguien lo detuvo.
× rojofailedFalló: no pudo arrancar, o terminó con un error. Es el que hay que investigar.
● blancoactivating, deactivatingEstá arrancando, o deteniéndose. Si no sale de ahí, está trabado.

La diferencia entre inactive y failed es la que importa: un servicio detenido está donde alguien lo dejó; uno fallado quiso funcionar y no pudo.

Para preguntar por un solo dato hay tres subcomandos que responden una palabra, y que además comunican la respuesta por el código de salida del tema 25, lo que los hace aptos para encadenar con && y ||:

terminal
$ systemctl is-active cron
active
$ systemctl is-enabled cron
enabled
$ systemctl is-active cron ssh snapd      # varios a la vez
active
inactive
active
$ systemctl is-active --quiet cron && echo "cron funciona" || echo "cron está caído"
cron funciona
Se escribePreguntaCódigo 0 si…
systemctl is-active servicio¿Está funcionando?Está activo.
systemctl is-enabled servicio¿Arrancará con el sistema?Está habilitado.
systemctl is-failed servicio¿Falló?Está en estado failed.

4. Listar los servicios

Para ver el conjunto, systemctl list-units enumera las unidades que systemd tiene cargadas. Sin filtro son varios centenares, de todos los tipos; con dos opciones queda lo que se busca:

terminal (salida abreviada)
$ systemctl list-units --type=service --state=running
  UNIT                      LOAD   ACTIVE SUB     DESCRIPTION
  accounts-daemon.service   loaded active running Accounts Service
  cron.service              loaded active running Regular background program processing daemon
  dbus.service              loaded active running D-Bus System Message Bus
  NetworkManager.service    loaded active running Network Manager
  rsyslog.service           loaded active running System Logging Service
  snapd.service             loaded active running Snap Daemon
  systemd-journald.service  loaded active running Journal Service
  unattended-upgrades.service loaded active running Unattended Upgrades Shutdown
  …
28 loaded units listed.

Las columnas ACTIVE y SUB son las dos palabras de la línea Active de la ficha. Entre los nombres hay conocidos: snapd, del tema 36; unattended-upgrades, el de las actualizaciones automáticas del tema 35; y dos que se ocupan de los registros, de los que hablaremos en la sección 9.

Se escribeLista
systemctl list-units --type=serviceLos servicios cargados, en cualquier estado.
systemctl list-units --type=service --state=runningLos que están en ejecución.
systemctl --failedLas unidades que fallaron. Es la primera consulta ante un sistema que anda mal.
systemctl list-unit-files --type=serviceTodos los servicios instalados, funcionen o no, con su estado de habilitación.
systemctl list-unit-files --state=enabledLo que arranca con el sistema.
terminal
$ systemctl --failed
  UNIT LOAD ACTIVE SUB DESCRIPTION

0 loaded units listed.
$ systemctl list-unit-files --type=service --state=enabled --no-pager | wc -l
52

Una lista vacía en la primera consulta es la respuesta que se quiere ver. La diferencia entre list-units y list-unit-files es la que hay entre lo que está en memoria y lo que está en el disco: un servicio instalado que nunca se inició aparece en la segunda y no en la primera.

5. Iniciar, detener, reiniciar y recargar

Las órdenes sí requieren privilegios, y siguen la costumbre de la terminal: si todo sale bien, no escriben nada. El resultado se comprueba con status.

terminal
$ sudo systemctl stop cron
$ systemctl status cron
○ cron.service - Regular background program processing daemon
     Loaded: loaded (/usr/lib/systemd/system/cron.service; enabled; preset: enabled)
     Active: inactive (dead) since Tue 2026-10-13 11:02:40 -03; 4s ago
   Duration: 2h 33min 26s
    Process: 842 ExecStart=/usr/sbin/cron -f -P $EXTRA_OPTS (code=killed, signal=TERM)
   Main PID: 842 (code=killed, signal=TERM)
…
$ sudo systemctl start cron
$ systemctl is-active cron
active

La ficha del servicio detenido cuenta cómo terminó: systemd le envió la señal TERM, la petición cortés del tema 33, y el proceso obedeció. Si no lo hubiera hecho en noventa segundos, le habría enviado KILL. Y nótese que sigue diciendo enabled: detenerlo ahora no cambia lo que pasará en el próximo arranque.

Se escribeEfectoCuándo
sudo systemctl start servicioLo inicia.
sudo systemctl stop servicioLo detiene.
sudo systemctl restart servicioLo detiene y lo vuelve a iniciar: es un proceso nuevo.Después de cambiar su configuración, o cuando se comporta mal.
sudo systemctl reload servicioLe pide que relea su configuración sin detenerse.Cuando el servicio lo admite, y no se quiere cortar a quienes lo están usando.
sudo systemctl reload-or-restart servicioRecarga si puede; si no, reinicia.Cuando no se sabe si admite recarga.
sudo systemctl try-restart servicioLo reinicia solo si ya estaba funcionando.En scripts.

La diferencia entre restart y reload pesa en los servicios que atienden a otros. Reiniciar un servidor web corta las conexiones en curso; recargarlo aplica la configuración nueva sin que nadie lo note. Casi todos los servicios leen su configuración una sola vez, al arrancar —la misma razón por la que hacía falta source ~/.bashrc en el tema 34—, de modo que editar un archivo de /etc no tiene efecto hasta que se hace una de las dos cosas.

Si el comando se ejecuta sin sudo, en un escritorio aparece un pedido de contraseña, y en una sesión remota, el mensaje Interactive authentication required.

Por qué no se usa kill

Un servicio es un proceso, y se le podría enviar una señal. En el tema 33 dejamos anotado qué ocurre, y ahora se puede ver:

terminal: matar un servicio supervisado
$ pidof cron
7802
$ sudo kill -9 7802
$ pidof cron
7841
$ journalctl -u cron -n 4 --no-pager
oct 13 11:06:31 equipo systemd[1]: cron.service: Main process exited, code=killed, status=9/KILL
oct 13 11:06:31 equipo systemd[1]: cron.service: Failed with result 'signal'.
oct 13 11:06:31 equipo systemd[1]: cron.service: Scheduled restart job, restart counter is at 1.
oct 13 11:06:31 equipo systemd[1]: Started cron.service - Regular background program processing daemon.

El proceso murió y, en el mismo segundo, hay otro con otro PID. Las cuatro líneas del registro lo narran: systemd vio que el proceso principal terminó de mala manera, lo anotó como una falla y lo inició de nuevo, porque la definición del servicio se lo ordena. Es la supervisión funcionando. Para detener un servicio hay que pedírselo a quien lo vigila; enviarle señales es discutir con el supervisor.

6. enable y disable: el arranque

Hay dos preguntas independientes sobre un servicio, y cada una tiene su par de órdenes.

AhoraEn cada arranque
La pregunta¿Está funcionando?¿Se iniciará solo?
Se consulta conis-activeis-enabled
Para que sístartenable
Para que nostopdisable
El efecto duraHasta el próximo reinicioHasta que se lo cambie

Las cuatro combinaciones son posibles, y todas tienen sentido:

enableddisabled
activeLo normal: funciona, y seguirá funcionando después de reiniciar.Funciona porque alguien lo inició a mano; tras un reinicio no estará. Es la causa clásica de «ayer andaba».
inactiveArrancará en el próximo inicio, pero ahora está detenido.Instalado y sin uso.
terminal
$ sudo systemctl disable cron
…
Removed "/etc/systemd/system/multi-user.target.wants/cron.service".
$ systemctl is-enabled cron; systemctl is-active cron
disabled
active
$ sudo systemctl enable cron
…
Created symlink /etc/systemd/system/multi-user.target.wants/cron.service → /usr/lib/systemd/system/cron.service.

Deshabilitarlo no lo detuvo: son cosas separadas. Y el mensaje muestra en qué consiste, materialmente, habilitar un servicio: en crear un enlace simbólico, como los del tema 14, dentro de un directorio que systemd recorre al arrancar. multi-user.target.wants se lee «lo que el sistema quiere tener en marcha cuando llega al estado multiusuario», que es el funcionamiento normal. No hay un registro oculto: la lista de lo que arranca es un directorio de enlaces, y se puede mirar con ls.

Se escribeEfecto
sudo systemctl enable servicioArrancará con el sistema. No lo inicia ahora.
sudo systemctl enable --now servicioLo habilita y lo inicia. Es lo que casi siempre se quiere.
sudo systemctl disable servicioNo arrancará con el sistema. No lo detiene ahora.
sudo systemctl disable --now servicioLo deshabilita y lo detiene.
sudo systemctl mask servicioLo bloquea: no puede iniciarse de ninguna manera, ni a mano ni porque otro servicio lo pida.
sudo systemctl unmask servicioLo desbloquea.

Un servicio deshabilitado todavía puede arrancar si otro lo necesita o si alguien escribe start. Enmascararlo lo impide, y es la herramienta para cuando «deshabilité esto y sigue apareciendo».

Al instalar un paquete que trae un servicio, el comportamiento depende de la familia. En Debian y Ubuntu, apt install lo deja habilitado y funcionando. En Fedora y en Arch queda instalado y detenido, y hay que escribir enable --now. Los nombres también varían, como los de los paquetes en el tema 36:

ServicioDebian, UbuntuFedora, RHEL
Tareas programadascroncrond
Servidor de acceso remotosshsshd
Servidor web Apacheapache2httpd

7. Una unidad por dentro

La definición de un servicio es un archivo de texto, y systemctl cat lo muestra:

terminal
$ systemctl cat cron
# /usr/lib/systemd/system/cron.service
[Unit]
Description=Regular background program processing daemon
Documentation=man:cron(8)
After=remote-fs.target nss-user-lookup.target

[Service]
EnvironmentFile=-/etc/default/cron
ExecStart=/usr/sbin/cron -f -P $EXTRA_OPTS
IgnoreSIGPIPE=false
KillMode=process
Restart=on-failure
SyslogFacility=cron

[Install]
WantedBy=multi-user.target

Tres secciones entre corchetes, con líneas Clave=valor. Se lee sin haber visto ninguno antes:

SecciónLíneaDice
[Unit]DescriptionEl texto que aparece en status y en las listas.
AfterDespués de qué otras unidades debe arrancar. Así se ordena el inicio.
[Service]ExecStartEl comando que se ejecuta para iniciar el servicio. Es una línea de comandos como las de este curso.
EnvironmentFileUn archivo con variables de entorno para el servicio: el mecanismo del tema 34.
RestartCuándo relanzarlo. on-failure: si termina mal. Es lo que vimos en la sección 5.
[Install]WantedByDónde se crea el enlace al habilitarlo: lo que explicaba el mensaje de enable.

Esto quita misterio a los servicios. Uno es un comando, más unas instrucciones sobre cuándo ejecutarlo y qué hacer si termina. Las definiciones están en dos lugares, con un reparto que ya conocemos:

DirectorioContieneQuién lo escribe
/usr/lib/systemd/system/Las unidades que traen los paquetes.El gestor de paquetes. No se editan: una actualización las reemplaza.
/etc/systemd/system/Las unidades propias, los cambios locales y los enlaces de enable.El administrador. Tienen precedencia sobre las anteriores.

Es la regla de los temas 8 y 35: /usr es del gestor de paquetes, y /etc, de quien administra la máquina. Para cambiar algo de un servicio no se toca su archivo: se escribe sudo systemctl edit servicio, que abre el editor —el de la variable EDITOR— sobre un archivo de ajustes en /etc, donde se anotan solo las líneas que cambian.

Cuando se crea o se modifica a mano un archivo de unidad, systemd no se entera hasta que se le avisa, con sudo systemctl daemon-reload. Olvidarlo produce una advertencia que conviene reconocer: Warning: The unit file changed on disk. Run 'systemctl daemon-reload' to reload units.

8. Temporizadores, apagado y servicios de usuario

Temporizadores

Un temporizador es una unidad que activa un servicio en ciertos momentos. Son la forma en que systemd programa tareas, y la razón por la que el sistema hace cosas «solo»:

terminal (salida abreviada)
$ systemctl list-timers
NEXT                        LEFT     LAST                        PASSED   UNIT                    ACTIVATES
Tue 2026-10-13 14:22:10 -03 3h 9min  Tue 2026-10-13 08:41:33 -03 2h 31min apt-daily.timer         apt-daily.service
Wed 2026-10-14 00:00:00 -03 12h      Tue 2026-10-13 08:29:14 -03 2h 43min logrotate.timer         logrotate.service
Wed 2026-10-14 06:18:44 -03 19h      Tue 2026-10-13 08:35:02 -03 2h 37min apt-daily-upgrade.timer apt-daily-upgrade.service
Mon 2026-10-19 00:33:51 -03 5 days   Mon 2026-10-12 09:01:17 -03 1 day 2h fstrim.timer            fstrim.service
…
11 timers listed.

Cada línea dice cuándo se ejecutará la próxima vez, cuánto falta, cuándo fue la última, y qué servicio dispara. Aquí está la explicación de varios comportamientos de temas anteriores. apt-daily renueva la lista de paquetes y apt-daily-upgrade instala las actualizaciones de seguridad: son los que a veces tienen ocupado el bloqueo de apt, como vimos en el tema 35. logrotate es el que archiva los registros, y aparece de nuevo en la sección 13.

Apagar y reiniciar

Como systemd administra el arranque, también administra el final. Estos comandos funcionan en un escritorio sin sudo, si no hay otros usuarios conectados:

Se escribeEfecto
systemctl rebootReinicia el equipo, deteniendo antes cada servicio en orden.
systemctl poweroffLo apaga.
systemctl suspendLo suspende.
sudo shutdown -r +10 "Mantenimiento"Programa un reinicio para dentro de diez minutos, avisando a los usuarios conectados. shutdown -c lo cancela.
Antes de reiniciar, comprueba dónde estás

El indicador muestra el nombre de la máquina por una razón, dijimos en el tema 34, y este es el caso. Con una terminal conectada a un servidor remoto y otra en el equipo propio, reboot escrito en la ventana equivocada reinicia el servidor, con todos sus usuarios adentro. Un vistazo al indicador, o un hostname, antes de pulsar Enter.

Servicios de usuario

En el árbol de procesos del tema 32 había un segundo systemd, con la opción --user. Es una instancia propia de cada sesión, que administra servicios del usuario: el servidor de sonido, los agentes de claves, las partes del escritorio. Se la consulta con los mismos subcomandos y la opción --user, sin privilegios:

terminal
$ systemctl --user list-units --type=service --state=running | head -n 4
  UNIT                     LOAD   ACTIVE SUB     DESCRIPTION
  dbus.service             loaded active running D-Bus User Message Bus
  pipewire.service         loaded active running PipeWire Multimedia Service
  xdg-desktop-portal.service loaded active running Portal service

Si un servicio «no existe» según systemctl status y sin embargo se lo ve en ps, puede ser de usuario: hay que repetir la consulta con --user.

9. Dos sistemas de registro

Un registro, o log, es la secuencia de mensajes que un programa va anotando sobre lo que hace: cuándo arrancó, qué pedido atendió, qué error encontró. Cada mensaje lleva la fecha, la máquina y el programa que lo escribió.

Un servicio no tiene terminal en la que escribir. Sus mensajes los recoge systemd, y en un sistema Ubuntu terminan en dos lugares a la vez, lo que al principio confunde.

Los mensajes del kernel, de los servicios y de los programas llegan a journald. Journald los guarda en el journal, un archivo binario que se lee con journalctl, y los reenvía a rsyslog, que los escribe en archivos de texto dentro de /var/log, legibles con less, grep y tail El kernel Los servicios sudo, logger… journald recoge todo El journal /var/log/journal · binario, con índice se lee con journalctl rsyslog → archivos de texto /var/log/syslog, auth.log, kern.log se leen con less, grep, tail
Los mismos mensajes, guardados de dos maneras. El journal es propio de systemd; los archivos de texto son la tradición de Unix.
El journalLos archivos de /var/log
Lo escribesystemd-journaldrsyslog, y algunos programas directamente
FormatoBinario, con índicesTexto, una línea por mensaje
Se lee conjournalctlless, grep, tail, awk
Filtrar por servicio, fecha o gravedadCon una opciónCon expresiones regulares, a mano
IncluyeTodo: kernel, servicios, y lo que cada servicio escribe en su salida de erroresLo que se envía al sistema de registro
Está enTodas las distribuciones con systemdDebian y Ubuntu lo instalan; Fedora y Arch, ya no por defecto

El journal es binario, y esa es la excepción más notable a la regla de que en Linux todo es texto: cat sobre sus archivos muestra basura. A cambio, guarda cada mensaje con sus datos por separado —el servicio, el PID, el usuario, la gravedad— y por eso puede filtrar por cualquiera de ellos sin adivinar el formato. Y journalctl escribe texto común, de modo que todo lo aprendido en el bloque 6 se le aplica a su salida.

Los registros contienen información sensible: quién entró, desde dónde, qué comando ejecutó con sudo. Por eso no los lee cualquiera. Un usuario común ve en el journal solo sus propios mensajes; los del sistema los ven root y los miembros del grupo adm, al que pertenece el primer usuario de Ubuntu, como vimos en el tema 16. Si journalctl avisa que no muestra todo, la solución es sudo.

10. journalctl: leer el journal

Sin opciones, journalctl muestra el journal completo, desde el mensaje más antiguo que conserve, dentro de less. Son cientos de miles de líneas; casi nunca es lo que se quiere, pero sirve para ver la forma de un mensaje:

anatomía de una línea del journal
oct 13 11:02:40 equipo sudo[7790]:      ana : TTY=pts/0 ; PWD=/home/ana ; USER=root ; COMMAND=/usr/bin/systemctl stop cron
      │           │      │    │                            │
      │           │      │    │                            └─ el mensaje
      │           │      │    └─ el PID del proceso
      │           │      └─ el programa que lo escribió
      │           └─ el nombre de la máquina
      └─ la fecha y la hora

Este mensaje es, además, un recordatorio de lo dicho en el tema 19: cada uso de sudo queda anotado, con el usuario, el directorio y el comando completo.

Se escribeMuestra
journalctlTodo, desde el principio.
journalctl -eLo mismo, saltando al final: lo más reciente.
journalctl -n 50Los últimos 50 mensajes.
journalctl -rEn orden inverso: lo más nuevo primero.
journalctl -fLos últimos mensajes, y los que vayan llegando. Se sale con Ctrl+C.
journalctl -bSolo los de este arranque.
journalctl -b -1Los del arranque anterior.
journalctl -kSolo los del kernel. Sección 12.
journalctl --no-pagerSin less: escribe todo de corrido. Para tuberías y redirecciones.

journalctl -f es el tail -f del tema 12, aplicado al journal, y se usa de la misma manera: en una terminal se lo deja corriendo, y en otra se hace lo que se quiere observar. Es la forma de ver qué pasa en el sistema en el momento en que se conecta un dispositivo, se inicia un servicio o falla un inicio de sesión.

La opción -b delimita por arranque, que suele ser el límite natural de un problema. El journal conserva varios, y se los enumera:

terminal
$ journalctl --list-boots | tail -n 3
 -2 9c0b4e7a51f24d0c8e3a6b9d1f2c5a70 Sun 2026-10-11 09:02:11 -03 Sun 2026-10-11 23:40:02 -03
 -1 d41f8a2b6c3e49a7b5d0e1f2a3c4b5d6 Mon 2026-10-12 08:55:40 -03 Tue 2026-10-13 00:12:31 -03
  0 7a1e0c5594d34f0e8b6fa3c1d2e9b470 Tue 2026-10-13 08:29:01 -03 Tue 2026-10-13 11:20:44 -03

El índice 0 es el arranque actual, y su identificador es el Boot ID que mostraba hostnamectl en el tema 37. Los negativos son los anteriores. «¿Por qué se apagó anoche?» se responde mirando el final del arranque previo: journalctl -b -1 -e.

Cualquier usuario puede escribir en el journal, con logger. Sirve para dejar una marca antes de una prueba, y para que un script propio anote lo que hace:

terminal
$ logger -t practica "Prueba desde la terminal"
$ journalctl -t practica --no-pager
oct 13 11:21:08 equipo practica[7930]: Prueba desde la terminal

11. Filtrar: servicio, fecha y prioridad

La utilidad de journalctl está en sus filtros, que se combinan libremente. Tres cubren casi todas las consultas.

Por servicio: -u

terminal
$ journalctl -u cron -b --no-pager | tail -n 3
oct 13 11:06:31 equipo systemd[1]: cron.service: Scheduled restart job, restart counter is at 1.
oct 13 11:06:31 equipo systemd[1]: Started cron.service - Regular background program processing daemon.
oct 13 11:17:01 equipo CRON[7902]: (root) CMD (cd / && run-parts --report /etc/cron.hourly)

-u, de unit, muestra los mensajes de un servicio: los que escribió el programa y los que escribió systemd acerca de él. Es el filtro que más se usa, y las líneas finales de systemctl status son esto mismo, limitado a diez. Se puede repetir para ver varios servicios intercalados en orden de tiempo.

Por fecha: --since y --until

terminal
$ journalctl --since "10 minutes ago" --no-pager | wc -l
37
$ journalctl -u cron --since "11:00" --until "11:10" --no-pager | wc -l
9
Se escribeAbarca
--since todayDesde las cero horas de hoy.
--since yesterday --until todayEl día de ayer, completo.
--since "1 hour ago"La última hora. También "30 min ago", "2 days ago".
--since "09:00" --until "09:30"Media hora de hoy.
--since "2026-10-12 22:00"Desde una fecha y hora exactas.

Las expresiones van en inglés y, si llevan espacios, entre comillas. Acotar por tiempo es lo que convierte una búsqueda imposible en una lectura de veinte líneas: si se sabe que algo falló a las tres y cuarto, se pide de las tres y diez a las tres y veinte, y se lee todo lo que ocurrió alrededor, que es donde suele estar la causa.

Por prioridad: -p

Cada mensaje lleva un nivel de gravedad, de ocho posibles. Es un dato que los archivos de texto no muestran, y que en el journal permite separar lo que importa de la rutina.

NivelNombreSe usa para
0emergEl sistema no puede seguir.
1alertHay que actuar de inmediato.
2critUna falla crítica.
3errErrores: algo no funcionó.
4warningAdvertencias: funcionó, pero hay algo que mirar.
5noticeHechos normales que merecen atención.
6infoInformación de rutina. La gran mayoría de los mensajes.
7debugDetalle para quien desarrolla el programa.
terminal
$ journalctl -b --no-pager | wc -l
4218
$ journalctl -b -p err --no-pager | wc -l
7
$ journalctl -b -p warning..warning --no-pager | wc -l
64

-p err muestra los mensajes de ese nivel y los más graves: de cuatro mil líneas quedan siete. La forma con dos puntos indica un rango, y con el mismo nivel en los dos extremos, ese nivel solo. En la pantalla, journalctl colorea las líneas según la gravedad: los errores en rojo, las advertencias en amarillo.

Conviene saber que casi todos los sistemas tienen algunos errores en cada arranque, por dispositivos que no existen o funciones que el equipo no ofrece, y que no significan nada. La manera de reconocerlos es mirar el registro cuando todo funciona bien: lo que aparece siempre no es la causa del problema de hoy.

Otros filtros y formatos

Se escribeEfecto
-g 'patrón'Solo los mensajes que coinciden con una expresión regular. Si el patrón va en minúsculas, no distingue mayúsculas.
-t nombrePor el nombre del programa: journalctl -t sudo.
_PID=842, _UID=1000Por proceso; por usuario.
/usr/bin/programaPor la ruta del ejecutable.
-o short-isoCon la fecha en formato 2026-10-13T11:02:40-03:00, que se puede ordenar y comparar.
-o catSolo el mensaje, sin fecha ni programa.
-o json-prettyCada mensaje con todos sus campos.
-xAgrega explicaciones a algunos mensajes de systemd.
terminal: los filtros, combinados
$ journalctl -t sudo --since today -o cat --no-pager | grep -c COMMAND     # usos de sudo hoy
14
$ journalctl -b -p err -o short-iso --no-pager | awk '{print $3}' | sort | uniq -c | sort -rn
      4 kernel:
      2 gdm-session-worker[2301]:
      1 bluetoothd[901]:

La segunda línea es el recuento del tema 26, aplicado a la pregunta «¿quién produce los errores?». Con --no-pager, journalctl es un productor de texto más, y encaja en cualquier tubería.

12. El registro del kernel

El kernel también escribe, y sus mensajes son los que hablan del hardware: los dispositivos que detecta, los errores de disco, la memoria que se agota. Se los lee con journalctl -k, o con el comando tradicional, dmesg, que en Ubuntu requiere sudo.

terminal: lo que el kernel dijo al conectar una memoria USB
$ journalctl -k --since "2 minutes ago" --no-pager
oct 13 11:26:02 equipo kernel: usb 1-2: new high-speed USB device number 5 using xhci_hcd
oct 13 11:26:02 equipo kernel: usb 1-2: Product: DataTraveler 3.0
oct 13 11:26:03 equipo kernel: sd 2:0:0:0: [sdb] 31260672 512-byte logical blocks: (16.0 GB/14.9 GiB)
oct 13 11:26:03 equipo kernel:  sdb: sdb1
oct 13 11:26:03 equipo kernel: sd 2:0:0:0: [sdb] Attached SCSI removable disk

Es la tercera manera de saber qué nombre recibió un dispositivo, además de las dos del tema 38, y la que funciona cuando el dispositivo no aparece en lsblk: si el kernel no escribe nada al conectarlo, el problema es eléctrico; si escribe errores, ahí está el diagnóstico.

Y es aquí donde queda anotada la explicación que prometimos en el tema 37, para el programa que desaparece sin dejar mensaje:

terminal
$ journalctl -k -g 'out of memory' --no-pager
oct 12 16:41:07 equipo kernel: Out of memory: Killed process 5120 (firefox) total-vm:9812560kB, anon-rss:5234112kB, file-rss:0kB, shmem-rss:48212kB, UID:1000 pgtables:14232kB oom_score_adj:100

El kernel se quedó sin memoria y terminó el proceso 5120, que ocupaba cinco gigabytes. En los escritorios actuales suele adelantarse otro servicio, systemd-oomd, que mata antes de llegar al límite; sus mensajes se buscan con journalctl -u systemd-oomd.

Se escribeMuestra
journalctl -kLos mensajes del kernel de este arranque.
journalctl -k -b -1Los del arranque anterior. dmesg no puede: solo conoce el actual.
journalctl -k -p errLos errores del kernel.
journalctl -kf, sudo dmesg -wLos que vayan llegando.
sudo dmesg -TEl registro del kernel con fechas legibles, en lugar de segundos desde el arranque.

Los mensajes del kernel que hay que tomar en serio son los que hablan de errores de entrada y salida en un disco —líneas con I/O error y el nombre de un dispositivo—, porque suelen anunciar un disco que está por fallar. Son la causa habitual del sistema de archivos que pasa solo a modo de solo lectura, del tema 38.

13. Los archivos de /var/log y el espacio

En Ubuntu, rsyslog sigue escribiendo los archivos de texto que recorrimos en el tema 8, y varios programas llevan además los suyos. Son los registros que se leen con las herramientas de siempre.

ArchivoContieneEn Fedora
/var/log/syslogEl registro general: casi todo lo que no tiene archivo propio./var/log/messages
/var/log/auth.logLo relativo a la identidad: inicios de sesión, sudo, ssh, cambios de contraseña./var/log/secure
/var/log/kern.logLos mensajes del kernel.—
/var/log/dpkg.log, /var/log/apt/La historia del gestor de paquetes, del tema 35.dnf history
/var/log/nginx/, /var/log/apache2/…Los registros propios de un servicio, que no pasan por el journal: cada pedido atendido por un servidor web, por ejemplo.Igual
/var/log/journal/El journal. Binario: no se lee con cat.Igual

La penúltima fila es la razón por la que estos archivos importan aun teniendo journalctl: muchas aplicaciones escriben sus propios registros, y con más detalle que el que envían al sistema. El proyecto del tema 42 consiste en analizar uno de ellos.

terminal
$ ls -lh /var/log/syslog*
-rw-r----- 1 syslog adm 2,1M oct 13 11:26 /var/log/syslog
-rw-r----- 1 syslog adm 5,8M oct 12 00:00 /var/log/syslog.1
-rw-r----- 1 syslog adm 612K oct  5 00:00 /var/log/syslog.2.gz
-rw-r----- 1 syslog adm 588K sep 28 00:00 /var/log/syslog.3.gz
-rw-r----- 1 syslog adm 640K sep 21 00:00 /var/log/syslog.4.gz
$ grep -c 'cron' /var/log/syslog
31
$ zgrep -c 'cron' /var/log/syslog.2.gz
214

Los permisos confirman lo dicho: rw-r-----, del usuario syslog y el grupo adm. Y la lista muestra la rotación.

La rotación de registros es el procedimiento por el cual, periódicamente, el archivo en uso se renombra, se empieza uno nuevo, se comprimen los anteriores y se borra el más viejo. Evita que un registro crezca sin límite.

La hace logrotate, activado cada noche por el temporizador de la sección 8, según las reglas de /etc/logrotate.d/. El archivo sin número es el actual; el .1, el período anterior, todavía sin comprimir; del .2.gz en adelante, los más viejos, que se leen sin descomprimir con zcat, zless y zgrep, del tema 15. Un servidor que conserva cuatro semanas responde por lo ocurrido en el último mes, y no más.

Un registro en uso no se borra con rm

Es el caso del tema 38: si se borra el archivo en que un servicio está escribiendo, el servicio sigue escribiendo en un archivo que ya no tiene nombre, el espacio no se libera y, además, los mensajes nuevos dejan de ser visibles. Para recuperar espacio de urgencia se vacía el archivo, con sudo truncate -s 0 /var/log/archivo, y luego se corrige la causa: una rotación mal configurada, o un programa que repite el mismo error mil veces por segundo. Lo segundo es lo más frecuente, y leer las últimas líneas antes de vaciar dice cuál es.

El espacio del journal

El journal se limita solo, a una fracción del sistema de archivos, pero esa fracción puede ser de gigabytes. Es la parte que le tocaba a este tema del inventario de la sección 8 del tema 38:

terminal
$ journalctl --disk-usage
Archived and active journals take up 1.1G in the file system.
$ sudo journalctl --vacuum-size=200M
…
Vacuuming done, freed 904.0M of archived journals from /var/log/journal/3f9c41d27a8e4b6b9d0e5a17c2f48b61.
Se escribeEfecto
journalctl --disk-usageInforma cuánto ocupa el journal.
sudo journalctl --vacuum-size=200MBorra los mensajes más viejos hasta que ocupe 200 MiB.
sudo journalctl --vacuum-time=2weeksBorra lo que tenga más de dos semanas.

El directorio lleva por nombre el Machine ID del tema 37. Para que el límite sea permanente se fija SystemMaxUse=200M en /etc/systemd/journald.conf, y se reinicia systemd-journald. Como siempre, lo que es de un programa se limpia con ese programa, no con rm.

14. Diagnosticar un servicio que falla

Las dos mitades del tema se juntan en una situación: se cambió la configuración de un servicio, se lo reinició, y no arranca. El ejemplo es el servidor de acceso remoto, ssh, del que nos ocupamos en el tema siguiente.

terminal
$ sudo systemctl restart ssh
Job for ssh.service failed because the control process exited with error code.
See "systemctl status ssh.service" and "journalctl -xeu ssh.service" for details.
$ systemctl status ssh --no-pager -n 0
× ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/usr/lib/systemd/system/ssh.service; enabled; preset: enabled)
     Active: failed (Result: exit-code) since Tue 2026-10-13 11:34:09 -03; 6s ago
    Process: 8123 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=255/EXCEPTION)
        CPU: 12ms
$ journalctl -u ssh -b -n 4 --no-pager
oct 13 11:34:09 equipo sshd[8123]: /etc/ssh/sshd_config: line 34: Bad configuration option: PermitRootLogn
oct 13 11:34:09 equipo sshd[8123]: /etc/ssh/sshd_config: terminating, 1 bad configuration options
oct 13 11:34:09 equipo systemd[1]: ssh.service: Control process exited, code=exited, status=255/EXCEPTION
oct 13 11:34:09 equipo systemd[1]: ssh.service: Failed with result 'exit-code'.

El mensaje de error de systemctl no dice qué pasó, pero dice dónde mirar, con los dos comandos escritos. La ficha confirma el estado failed y muestra que el proceso terminó con un código de salida distinto de cero. Y el registro tiene la respuesta completa, en la primera línea: archivo, número de línea y la palabra mal escrita. Falta una letra en PermitRootLogin.

  1. Leer el estado: systemctl status servicio. ¿failed, o inactive? ¿Con qué código terminó? qué
  2. Leer el registro: journalctl -u servicio -b -e. Buscar el primer error, no el último. por qué
  3. Corregir la causa: casi siempre, una línea de un archivo de /etc. arreglar
  4. Probar la configuración sin reiniciar, si el servicio lo permite. arreglar
  5. Reiniciar y comprobar: sudo systemctl restart servicio, y otra vez status. verificar

El segundo paso tiene su indicación: el primer error. Cuando un programa falla, el motivo real se escribe una vez, y después vienen las consecuencias, que son las líneas que quedan a la vista al final. En el ejemplo, las dos últimas son de systemd constatando el fracaso; la causa estaba dos líneas más arriba.

El cuarto paso evita repetir el accidente. Muchos servicios tienen una opción que revisa la configuración y termina, sin afectar al que está funcionando. Es el mismo principio que mount -a para fstab, en el tema 38: probar antes de comprometerse.

ServicioProbar la configuración
Servidor sshsudo sshd -t
nginxsudo nginx -t
Apachesudo apachectl configtest
sudoerssudo visudo -c, del tema 19
Un archivo de unidadsystemd-analyze verify archivo.service
En un servidor remoto, no se cierra la sesión hasta comprobar

El ejemplo no fue elegido al azar. Si se rompe la configuración del servicio por el que uno está conectado y se lo reinicia, la sesión abierta suele sobrevivir, pero no se podrá abrir otra: quien cierra esa ventana se queda afuera de la máquina. La regla al tocar ssh, el cortafuegos o la red de un equipo remoto es probar la configuración, reiniciar, y verificar desde una segunda terminal que se puede entrar, antes de cerrar la primera. Es la misma red de seguridad que usamos para editar .bashrc en el tema 34.

15. Recetas y errores comunes

Quiero…Comando
Saber si un servicio funcionasystemctl status servicio
Ver qué servicios están en ejecuciónsystemctl list-units --type=service --state=running
Ver si algo fallósystemctl --failed
Ver qué arranca con el sistemasystemctl list-unit-files --state=enabled
Aplicar un cambio de configuraciónsudo systemctl restart servicio, o reload
Que un servicio arranque siempre, y empiece yasudo systemctl enable --now servicio
Que no arranque más, y detenerlosudo systemctl disable --now servicio
Ver con qué comando se inicia un serviciosystemctl cat servicio
Ver las tareas programadas del sistemasystemctl list-timers
Ver qué tardó más en arrancarsystemd-analyze blame | head
Leer los últimos mensajes de un serviciojournalctl -u servicio -e
Seguir en vivo lo que dice un serviciojournalctl -u servicio -f
Ver los errores desde que arrancó el sistemajournalctl -b -p err
Ver qué pasó en un intervalojournalctl --since "09:00" --until "09:15"
Ver por qué se apagó o se colgó la vez anteriorjournalctl -b -1 -e
Ver qué dijo el kernel al conectar un dispositivojournalctl -kf, y conectarlo
Saber si el kernel mató un proceso por falta de memoriajournalctl -k -g 'out of memory'
Ver quién usó sudo hoyjournalctl -t sudo --since today
Buscar en los registros ya rotadoszgrep 'texto' /var/log/syslog.*.gz
Reducir el espacio del journalsudo journalctl --vacuum-size=200M
Dejar una marca propia en el registrologger -t etiqueta "mensaje"
SíntomaCausaSolución
Unit nombre.service could not be found.El nombre es otro, el paquete no está instalado, o es un servicio de usuario.systemctl list-unit-files | grep texto; probar con --user.
Interactive authentication required.La orden necesita privilegios.sudo.
Job for … failed … See "systemctl status …"El servicio no pudo arrancar.Los dos comandos que el mensaje indica. Sección 14.
Cambié la configuración y el servicio se comporta igual.La lee solo al arrancar.restart o reload.
El servicio funcionaba y, después de reiniciar el equipo, no está.Estaba iniciado, pero no habilitado.sudo systemctl enable servicio.
Lo deshabilité y sigue arrancando.Otra unidad lo requiere, o lo activa un socket o un temporizador.sudo systemctl mask servicio; revisar list-timers.
Lo maté con kill y reaparece.systemd lo supervisa y lo relanza.sudo systemctl stop servicio.
Warning: The unit file … changed on disk.Se editó un archivo de unidad sin avisar a systemd.sudo systemctl daemon-reload.
active (exited), y no hay ningún proceso.Es un servicio que hace una tarea y termina.Es lo normal.
El estado oscila entre activating y failed.Falla al arrancar, y systemd reintenta.Leer el primer error en journalctl -u.
System has not been booted with systemd as init system.El sistema no usa systemd: un contenedor, o una instalación antigua de WSL.En contenedores no hay servicios que administrar; en WSL, habilitar systemd en su configuración.
journalctl avisa que no se muestran mensajes de otros usuarios.Sin privilegios se ve solo lo propio.sudo, o pertenecer al grupo adm.
journalctl -u servicio responde -- No entries --.El nombre no coincide, el servicio no escribió nada, o los mensajes ya se borraron por antigüedad.Verificar el nombre con systemctl status; ampliar el período.
journalctl se queda «colgado» en una pantalla.Está dentro de less.q para salir; --no-pager para evitarlo.
La tubería después de journalctl -f no muestra nada.Los filtros retienen la salida hasta juntar bastante.Filtrar con las opciones de journalctl, -u y -g; o grep --line-buffered.
dmesg: read kernel buffer failed: Operation not permittedEn Ubuntu, el registro del kernel está reservado.sudo dmesg, o journalctl -k.
cat /var/log/syslog responde Permission denied.Los registros son del grupo adm.sudo.
Busco /var/log/syslog y no existe.La distribución no instala rsyslog.Usar journalctl.

La referencia del tema:

Se escribeQué hace
systemctl status servicioMuestra el estado, los procesos y los últimos mensajes.
systemctl is-active, is-enabled, is-failedResponden con una palabra y un código de salida.
systemctl list-units --type=serviceLista los servicios cargados.
systemctl --failedLista las unidades que fallaron.
sudo systemctl start, stop, restart, reloadInicia, detiene, reinicia, recarga la configuración.
sudo systemctl enable, disableLo habilita o deshabilita para el arranque. Con --now, además lo inicia o lo detiene.
sudo systemctl mask, unmaskImpide o permite que se inicie.
systemctl cat servicioMuestra su archivo de unidad.
sudo systemctl daemon-reloadHace que systemd relea los archivos de unidad.
systemctl list-timersLista los temporizadores.
systemctl reboot, poweroffReinicia; apaga.
journalctl -u servicioLos mensajes de un servicio.
journalctl -b, -e, -f, -n NEste arranque; ir al final; seguir en vivo; las últimas N líneas.
journalctl --since, --untilAcota por fecha y hora.
journalctl -p errSolo los errores y lo más grave.
journalctl -k, sudo dmesgEl registro del kernel.
journalctl --disk-usage, --vacuum-size=Cuánto ocupa el journal; reducirlo.
logger "mensaje"Escribe un mensaje en el registro.

Con este tema el equipo ya no tiene partes opacas: sabemos qué programas tiene instalados, qué recursos consume, qué servicios lo mantienen andando y dónde escribe cada uno lo que le pasa. Hasta aquí, todo ocurrió dentro de una sola máquina. El último tema del bloque sale de ella. En el tema 40 vemos la red desde la terminal: averiguar la propia dirección, comprobar si otro equipo responde, descargar un archivo, y entrar a una máquina remota con ssh para usar allí todo lo aprendido.

16. Resumen

17. Preguntas de repaso

Intenta responder cada una antes de abrir la respuesta.

1. ¿Qué es un servicio, y qué papel cumple systemd respecto de ellos?

Un servicio es un programa que funciona en segundo plano de manera permanente, sin terminal. systemd los inicia al arrancar, los supervisa, los relanza si corresponde, los detiene al apagar y recoge sus mensajes.

2. En la ficha de systemctl status, ¿qué diferencia hay entre enabled y active?

active indica que el servicio está funcionando ahora. enabled, que está configurado para iniciarse solo en cada arranque.

3. ¿Qué diferencia hay entre un servicio inactive y uno failed?

El inactive está detenido, porque nadie lo inició o alguien lo detuvo. El failed intentó funcionar y terminó con un error.

4. ¿Con qué comando ves, de un vistazo, si hay servicios que fallaron?

Con systemctl --failed.

5. Editaste el archivo de configuración de un servicio y nada cambió. ¿Por qué, y qué haces?

Porque el servicio lee su configuración al arrancar. Hay que reiniciarlo con sudo systemctl restart, o recargarlo con reload si lo admite.

6. ¿Qué diferencia hay entre restart y reload?

restart detiene el servicio y lo inicia de nuevo: es otro proceso, y las conexiones en curso se cortan. reload le pide que relea la configuración sin detenerse.

7. Matas un servicio con kill -9 y un segundo después hay otro proceso igual. ¿Qué ocurrió?

systemd detectó que el proceso terminó de mala manera y lo relanzó, porque la unidad lo indica con Restart=. Para detenerlo hay que usar sudo systemctl stop.

8. Instalaste un servicio, lo iniciaste con start y funcionó. Al día siguiente, después de reiniciar el equipo, no está. ¿Qué faltó?

Habilitarlo: sudo systemctl enable servicio. start solo lo inicia para la sesión actual del sistema.

9. ¿Qué hace sudo systemctl enable --now cron? ¿En qué consiste, materialmente, habilitar un servicio?

Lo habilita para el arranque y además lo inicia. Habilitar consiste en crear un enlace simbólico al archivo de unidad dentro de un directorio que systemd recorre al arrancar.

10. ¿Cómo averiguas qué comando ejecuta un servicio al iniciarse?

Con systemctl cat servicio, en la línea ExecStart de la sección [Service].

11. ¿Por qué no se puede leer el journal con cat o grep, y cómo se combina entonces con esos filtros?

Porque está guardado en formato binario. journalctl lo convierte en texto; con --no-pager, su salida se puede enviar por una tubería a cualquier filtro.

12. ¿Qué muestra journalctl -u ssh -b -p err?

Los mensajes del servicio ssh, del arranque actual, de nivel error o más grave.

13. Un servicio falló hoy a las 14:20. Escribe un comando que muestre todo lo que el sistema registró entre las 14:15 y las 14:25.

journalctl --since "14:15" --until "14:25"

14. ¿Para qué sirve journalctl -f, y a qué comando conocido se parece?

Muestra los últimos mensajes y sigue mostrando los que llegan, hasta Ctrl+C. Es el equivalente de tail -f para el journal.

15. Un programa desapareció sin mensaje de error. ¿Dónde buscas si lo terminó el kernel por falta de memoria?

En el registro del kernel: journalctl -k -g 'out of memory', o sudo dmesg.

16. En /var/log hay syslog, syslog.1 y syslog.2.gz. ¿Qué es cada uno, y cómo buscas una palabra en el último?

El archivo actual, el del período anterior y uno más viejo, comprimido: es la rotación de registros. En el comprimido se busca con zgrep palabra /var/log/syslog.2.gz.

17. Un servicio no arranca. ¿Cuáles son los dos primeros comandos, y qué buscas en el registro?

systemctl status servicio y journalctl -u servicio -b -e. En el registro se busca el primer error, que suele nombrar el archivo y la línea de la configuración.

Para practicar

  1. Ejecuta systemctl status cron, o crond en tu distribución. Identifica el archivo de unidad, si está habilitado, desde cuándo funciona, su PID y cuánta memoria ocupa. Compara el PID con el de pidof.
  2. Cuenta los servicios en ejecución, los habilitados y los instalados. Comprueba con systemctl --failed que no haya ninguno fallado, o averigua por qué lo está.
  3. Detén cron, mira su ficha, e inícialo de nuevo. Encadena systemctl is-active --quiet cron con && y || para que escriba «funciona» o «detenido», y pruébalo en los dos estados.
  4. Con cron en marcha, anota su PID, mátalo con sudo kill -9, y vuelve a mirar el PID. Lee con journalctl -u cron -n 6 cómo lo contó systemd.
  5. Deshabilita cron y comprueba que sigue activo. Lista el directorio /etc/systemd/system/multi-user.target.wants/ antes y después de volver a habilitarlo.
  6. Muestra el archivo de unidad de tres servicios con systemctl cat. En cada uno, ubica el comando que lo inicia y su política de reinicio.
  7. Ejecuta systemctl list-timers. ¿Cuál es el próximo en ejecutarse? Averigua con systemctl cat qué comando lanzará.
  8. Abre journalctl -f en una terminal. Desde otra, ejecuta logger -t practica "hola", un comando con sudo, y conecta un dispositivo USB si tienes. Observa qué aparece en cada caso.
  9. Cuenta los mensajes del arranque actual, y cuántos son de nivel warning y cuántos err. Obtén la lista de los programas que más errores produjeron, con awk, sort y uniq -c.
  10. Consulta cuánto ocupa el journal, y cuántos arranques conserva. Lista /var/log/syslog*, si existen, y busca la palabra error, sin distinguir mayúsculas, en el archivo actual y en uno comprimido.