A les distribucions amb systemd (pràcticament totes les actuals: Debian, Ubuntu, Fedora, RHEL i derivades…), els missatges del sistema i dels serveis els recull el servei systemd-journald en un registre central anomenat journal. La comanda per consultar-lo és journalctl. En aquesta guia t’explico com llegir-lo, com filtrar només el que t’interessa i com controlar quant espai ocupa.
Què és el journal
systemd-journald recull en un sol lloc:
- Els missatges del nucli (el que abans miraves amb
dmesg). - La sortida dels serveis gestionats per systemd (el que escriuen per pantalla o al syslog).
- Els missatges del procés d’arrencada.
A diferència dels fitxers de text de /var/log, el journal es guarda en un format binari indexat, amb molta informació addicional per a cada missatge (servei, PID, usuari, prioritat…). Per això no es llegeix amb cat sinó amb journalctl, i per això es pot filtrar tan fàcilment.
Qui el pot llegir
Un usuari normal només veu els seus propis missatges. Per veure els de tot el sistema has de fer servir sudo o pertànyer al grup systemd-journal (també hi tenen accés els grups adm i wheel):
sudo usermod -aG systemd-journal joan
Als exemples d’aquesta guia poso sudo per si de cas.
Ús bàsic
sudo journalctl
Mostra tot el journal, del missatge més antic al més recent, dins del paginador less (surts amb q). Cada línia té la data, el nom de l’equip, el procés i el missatge:
Oct 04 08:55:32 piiespai sshd-session[2160402]: Failed password for invalid user admin from 203.0.113.45 port 25804 ssh2
Oct 04 08:55:34 piiespai sshd-session[2160402]: Connection closed by invalid user admin 203.0.113.45 port 25804 [preauth]
Opcions més útils
| Opció | Què fa |
|---|---|
-e | Obre el paginador directament al final (el més recent) |
-n 50 | Mostra només les 50 darreres línies |
-r | Ordre invers: el més recent primer |
-f | Segueix el registre en temps real, com tail -f |
-u servei | Només els missatges d’un servei (unitat de systemd) |
-b | Només els missatges de l’arrencada actual (-b -1: l’anterior) |
-k | Només els missatges del nucli |
-p prioritat | Només els missatges d’aquesta prioritat o més greus |
-S, --since / -U, --until | Interval de temps |
-g patró | Només els missatges que coincideixen amb una expressió regular |
-x | Afegeix explicacions als missatges coneguts |
-o format | Format de sortida: short-iso, json-pretty, cat, verbose… |
--no-pager | Treu la sortida directament, sense less (útil en scripts) |
Exemples
El més recent i en temps real
sudo journalctl -e # obre el journal pel final
sudo journalctl -n 20 # les 20 darreres línies
sudo journalctl -f # en temps real (Ctrl+C per sortir)
Els missatges d’un servei
$ sudo journalctl -u ssh -n 3
Oct 04 08:55:30 piiespai sshd-session[2160402]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=203.0.113.45
Oct 04 08:55:32 piiespai sshd-session[2160402]: Failed password for invalid user admin from 203.0.113.45 port 25804 ssh2
Oct 04 08:55:34 piiespai sshd-session[2160402]: Connection closed by invalid user admin 203.0.113.45 port 25804 [preauth]
El nom del servei és el de la unitat de systemd (ssh a Debian i Ubuntu, sshd a RHEL i Fedora). Pots posar diversos -u alhora, i combinar-ho amb qualsevol altra opció:
sudo journalctl -u nginx -u php8.4-fpm --since "2 hours ago"
sudo journalctl -u ssh -f
Quan un servei no arrenca, el més pràctic és combinar systemctl status servei (que ja mostra les darreres línies del journal) amb journalctl -u servei -e.
Per dates
sudo journalctl --since "2026-10-01 10:00" --until "2026-10-01 12:00"
sudo journalctl --since "1 day ago"
sudo journalctl --since yesterday --until today
sudo journalctl --since "-30m"
--since i --until accepten dates (AAAA-MM-DD HH:MM:SS), les paraules yesterday, today, tomorrow i now, i temps relatius ("2 hours ago", -30m).
Per arrencades
$ sudo journalctl --list-boots
IDX BOOT ID FIRST ENTRY LAST ENTRY
0 30e152f11e704af29f69fd0469a3d18f Fri 2026-09-25 10:52:35 CEST Sun 2026-10-04 09:00:01 CEST
Aquí només hi ha una arrencada (la 0, l’actual); si n’hi hagués més, sortirien amb índexs negatius (-1, -2…).
sudo journalctl -b # l'arrencada actual
sudo journalctl -b -1 # l'anterior: ideal per saber per què es va penjar o reiniciar
Per poder veure arrencades anteriors, el journal ha de ser persistent (vegeu més avall).
Per gravetat (prioritat)
$ sudo journalctl -p err -b
Oct 04 03:35:36 piiespai sshd-session[2120562]: error: kex_exchange_identification: read: Connection reset by peer
Oct 04 04:24:19 piiespai sshd-session[2126627]: error: Protocol major versions differ: 2 vs. 1
-p err mostra els errors i tot el que és més greu. Les prioritats, de més a menys greu, són:
| Número | Nom | Significat |
|---|---|---|
| 0 | emerg | El sistema no es pot fer servir |
| 1 | alert | Cal actuar immediatament |
| 2 | crit | Situació crítica |
| 3 | err | Error |
| 4 | warning | Avís |
| 5 | notice | Normal però destacable |
| 6 | info | Informatiu |
| 7 | debug | Depuració |
També pots indicar un rang: -p warning..err.
Missatges del nucli
sudo journalctl -k # de l'arrencada actual, com dmesg
sudo journalctl -k -b -1 # de l'arrencada anterior
Útil per a problemes de maquinari, discos o controladors, i també per veure els paquets que bloqueja el tallafoc (UFW hi escriu les línies [UFW BLOCK]).
Buscar un text
sudo journalctl -g "Failed password" --since today
-g accepta expressions regulars i no distingeix majúscules de minúscules si el patró és tot en minúscules.
Per camps
Cada entrada té camps que pots fer servir com a filtre amb la forma CAMP=valor:
sudo journalctl _PID=1234 # un procés concret
sudo journalctl _COMM=cron # per nom de l'executable
sudo journalctl _UID=1000 # els missatges d'un usuari
sudo journalctl /usr/sbin/cron # tots els missatges d'un executable
Per veure tots els camps d’una entrada, fes servir -o verbose o -o json-pretty.
Una correcció de l’original: el filtre SYSLOG_FACILITY=3 no mostra els missatges de xarxa sinó els de la facility daemon (serveis del sistema). Més fàcil i llegible: journalctl --facility=daemon. La llista de facilities la pots veure amb journalctl --facility=help (kern, user, mail, daemon, auth…).
Guardar o compartir els registres
sudo journalctl -u nginx --since today --no-pager > nginx_avui.txt
sudo journalctl -b -o short-iso --no-pager > arrencada.txt
-o short-iso posa les dates en format ISO amb zona horària (2026-10-04T08:55:32+02:00), que s’entén millor si envies el fitxer a algú d’un altre país.
Compte: abans de compartir un registre, revisa’l. Hi pot haver adreces IP, noms d’usuari, rutes internes i fins i tot claus d’API o contrasenyes que algun script hagi escrit a la línia de comandes (per exemple, les comandes que executa cron hi queden registrades).
Journal persistent i espai en disc
Si existeix el directori /var/log/journal, el journal es guarda al disc i es conserva entre reinicis. Si no, es guarda a /run/log/journal, a la memòria, i es perd en apagar. A Debian 12 i posteriors, Ubuntu i Fedora ja és persistent per defecte. Si al teu sistema no ho és:
sudo mkdir -p /var/log/journal
sudo systemctl restart systemd-journald
Per saber quant ocupa i fer neteja:
$ journalctl --disk-usage
Archived and active journals take up 70.8M in the file system.
sudo journalctl --vacuum-size=200M # deixa'l per sota de 200 MB
sudo journalctl --vacuum-time=4weeks # esborra el que tingui més de 4 setmanes
Per defecte, el journal pot ocupar fins al 10 % del sistema de fitxers (amb un màxim de 4 GB). Per fixar un límit permanent, crea un fitxer /etc/systemd/journald.conf.d/mida.conf:
[Journal]
SystemMaxUse=500M
i reinicia el servei amb sudo systemctl restart systemd-journald.
I els fitxers de /var/log?
A moltes distribucions encara hi ha rsyslog, que copia els missatges del journal als fitxers de text de sempre (/var/log/syslog, /var/log/auth.log, /var/log/messages…). A Debian 12 i posteriors ja no s’instal·la per defecte, i per això potser no hi trobaràs syslog ni auth.log: tot és al journal. Els serveis que escriuen els seus propis fitxers (Apache, Nginx, MySQL…) continuen fent-ho a /var/log, com sempre.