journalctl-commando: gebruik, logs per service en de journaalgrootte opschonen
Het commando journalctl is het hulpmiddel waarmee je de logs die services en de kernel in het systemd-journaal achterlaten, selecteert en leest. Op Linux met systemd verzamelt systemd-journald deze logs in het journaal. Bij het lezen van logs per service, tijd en prioriteit op een AlmaLinux 9-server en een Debian 12-server zag een gewoon account alleen zijn eigen logs, en kon een server die het journaal in het geheugen houdt geen eerdere opstart kiezen.
De uitvoer hieronder komt van de twee servers. Hostnamen, accounts, boot-ID's, de procesnummers op de AlmaLinux-server en de release van het systemd-pakket zijn vervangen door voorbeeldwaarden, en beide servers gaven de tijd in UTC weer.
1️⃣ Het journalctl-commando gebruiken en recente logs lezen
Als je journalctl zonder opties uitvoert, opent het journaal in less vanaf de oudste regel. Voor recente logs stel je daarom met -n het aantal regels in. Laat je het getal na -n weg, dan krijg je 10 regels.
journalctl -n 3Oct 28 07:14:06 server1 systemd[1]: session-3017.scope: Deactivated successfully.
Oct 28 07:14:06 server1 systemd[1]: session-3017.scope: Consumed 3.934s CPU time.
Oct 28 07:14:07 server1 sudo[851987]: pam_unix(sudo:session): session closed for user userEen regel bestaat uit de tijd, de hostnaam, het programma dat de log schreef met zijn procesnummer, en het bericht. Met -r wordt de volgorde omgedraaid en staat de nieuwste regel bovenaan. In de crond-log van de AlmaLinux-server stond de laatst geschreven CMDEND-regel bovenaan.
journalctl -r -u crond -n 3Oct 28 07:01:01 server1 CROND[841384]: (root) CMDEND (run-parts /etc/cron.hourly)
Oct 28 07:01:01 server1 run-parts[841394]: (/etc/cron.hourly) starting 0anacron
Oct 28 07:01:01 server1 CROND[841388]: (root) CMD (run-parts /etc/cron.hourly)-f stopt niet na de laatste regel, maar blijft nieuw binnenkomende regels weergeven. Op de Debian 12-server bleef met -q en -t myapp de laatste logger-regel op het scherm staan, en werden met logger nog twee regels geschreven. De twee regels verschenen er direct onder.
journalctl -q -f -n 1 -t myappOct 28 07:12:46 server2 myapp[347704]: journalctl error test
Oct 28 07:14:35 server2 myapp[347881]: follow line 1
Oct 28 07:14:36 server2 myapp[347877]: follow line 2-f stopt pas als je op Ctrl+C drukt, dus gebruik het om de log te volgen terwijl een service herstart.
In less worden regels die breder zijn dan het scherm rechts afgekapt; het afgekapte deel bekijk je met de pijltjestoetsen. Uitvoer naar een pipe of bestand gaat niet via less. Om zonder less direct in de terminal te tonen, voeg je --no-pager toe.
2️⃣ journalctl-logs per service
Recente regels mengen de logs van veel services. Om de log van één service te zien, geef je daarom met -u de unitnaam op. De .service aan het eind van de unitnaam mag je weglaten.
journalctl -u crond -n 4Oct 28 06:01:01 server1 CROND[802926]: (root) CMDEND (run-parts /etc/cron.hourly)
Oct 28 07:01:01 server1 CROND[841388]: (root) CMD (run-parts /etc/cron.hourly)
Oct 28 07:01:01 server1 run-parts[841394]: (/etc/cron.hourly) starting 0anacron
Oct 28 07:01:01 server1 CROND[841384]: (root) CMDEND (run-parts /etc/cron.hourly)Schrijf je -u twee keer, dan verschijnen de logs van beide services door elkaar in tijdsvolgorde. Toen op de AlmaLinux-server crond en nginx samen werden gekozen voor 18 oktober van 08:00 tot 08:15, volgden op vier crond-regels om 08:01 twee nginx reload-regels om 08:12.
journalctl -u nginx -u crond --since '2026-10-18 08:00' --until '2026-10-18 08:15'Oct 18 08:01:01 server1 CROND[381522]: (root) CMD (run-parts /etc/cron.hourly)
Oct 18 08:01:01 server1 run-parts[381528]: (/etc/cron.hourly) starting 0anacron
Oct 18 08:01:01 server1 run-parts[381534]: (/etc/cron.hourly) finished 0anacron
Oct 18 08:01:01 server1 CROND[381518]: (root) CMDEND (run-parts /etc/cron.hourly)
Oct 18 08:12:30 server1 systemd[1]: Reloading nginx - high performance web server...
Oct 18 08:12:30 server1 systemd[1]: Reloaded nginx - high performance web server.systemctl status toont onder de servicestatus alleen de laatste 10 logregels, dus oudere logs bekijk je met journalctl -u. Direct nadat je systemctl restart voor een service hebt uitgevoerd, voer je journalctl -u uit om de opstartlog te controleren.
Logs die scripts of cron-taken met logger schreven, vind je via hun label (identifier), niet via een unit. Achter -t schrijf je dezelfde naam als bij -t van logger.
logger -t myapp 'journalctl test message'Op de Debian 12-server toonde logger niets op het scherm, en de geschreven regels werden gevonden met -t myapp.
journalctl -q -t myappOct 28 07:12:44 server2 myapp[347693]: journalctl test message-g houdt alleen regels over waarvan het bericht een bepaalde tekst bevat. Schrijf je de zoektekst helemaal in kleine letters, dan wordt geen onderscheid gemaakt tussen hoofd- en kleine letters.
journalctl -u crond -g anacron -n 2Oct 28 07:01:01 server1 run-parts[841394]: (/etc/cron.hourly) starting 0anacron-n telt de regels voordat -g filtert, dus van de laatste twee crond-regels bleef alleen die met anacron over.
3️⃣ Logs per tijdsbereik en per opstart
--since en --until bepalen het begin en eind van het weergegeven tijdsbereik. Staat er een spatie tussen datum en tijd, zet de waarde dan tussen enkele aanhalingstekens.
| Waarde van --since | Betekenis en wanneer je het gebruikt |
|---|---|
| '2026-10-28 06:00' | Vanaf 06:00:00 die dag (zonder seconden geldt 00), als je weet wanneer het probleem begon |
| today | Vanaf 00:00:00 vandaag, om alleen de logs van vandaag te zien |
| yesterday | Vanaf gisteren 00:00:00 tot nu; voor alleen gisteren voeg je --until today toe |
| '-2h' | Vanaf 2 uur geleden, om te zien wat er net gebeurde (hieronder gemeten) |
| '1 hour ago' | Vanaf 1 uur geleden, hetzelfde als -1h |
Op de AlmaLinux-server begonnen de laatste 2 uur bij de crond-regels van 06:01; hieronder staan de eerste vier daarvan.
journalctl -u crond --since '-2h' | head -4Oct 28 06:01:01 server1 CROND[802930]: (root) CMD (run-parts /etc/cron.hourly)
Oct 28 06:01:01 server1 run-parts[802936]: (/etc/cron.hourly) starting 0anacron
Oct 28 06:01:01 server1 CROND[802926]: (root) CMDEND (run-parts /etc/cron.hourly)
Oct 28 07:01:01 server1 CROND[841388]: (root) CMD (run-parts /etc/cron.hourly)-b houdt alleen logs sinds de huidige opstart over. Zoek je waarom een server opnieuw is opgestart, kijk dan eerst in de lijst met opstarts of er nog logs van de vorige opstart zijn.
journalctl -b -u crond -n 2Oct 28 07:01:01 server1 run-parts[841394]: (/etc/cron.hourly) starting 0anacron
Oct 28 07:01:01 server1 CROND[841384]: (root) CMDEND (run-parts /etc/cron.hourly)--list-boots toont voor elke opstart die in het journaal staat het nummer, de boot-ID en de tijd van de eerste en laatste regel.
journalctl --list-bootsIDX BOOT ID FIRST ENTRY LAST ENTRY
0 4f1c2a9be0d34c7a8e6b5d20c1f3a7e9 Sat 2026-10-17 08:29:26 UTC Wed 2026-10-28 07:16:10 UTCDe AlmaLinux-server bewaart zijn journaal niet op schijf en had daarom maar één opstartrecord. Daardoor eindigde -b -1 voor de vorige opstart met alleen een melding.
journalctl -b -1Specifying boot ID or boot offset has no effect, no persistent journal was found.Logs van een vorige opstart kun je met -b -1 alleen lezen op servers die het journaal op schijf (/var/log/journal) opslaan.
4️⃣ journalctl-foutlogs en kernellogs
-p kiest regels op prioriteit van de log. Geef je één niveau op, dan verschijnen dat niveau en alle belangrijkere niveaus, en het niveau mag je als naam of als getal schrijven.
| Niveau | Numeriek | Betekenis |
|---|---|---|
| emerg | 0 | Het systeem is onbruikbaar |
| alert | 1 | Er moet direct worden ingegrepen |
| crit | 2 | Kritieke fout |
| err | 3 | Fout |
| warning | 4 | Waarschuwing |
| notice | 5 | Normaal maar het opmerken waard; niveau van regels die logger zonder -p schrijft |
| info | 6 | Informatie |
| debug | 7 | Debugbericht |
Na het schrijven van één err-regel met logger en kiezen met -p err viel de notice-regel met hetzelfde label (journalctl test message) weg en bleef alleen de err-regel over.
logger -t myapp -p user.err 'journalctl error test'; journalctl -q -t myapp -p errOct 28 07:12:46 server2 myapp[347704]: journalctl error testVerbind je twee niveaus met twee punten, dan wordt alleen dat bereik getoond. Met warning..err blijven alleen de niveaus waarschuwing en fout over.
journalctl -q -t myapp -p warning..errOct 28 07:12:46 server2 myapp[347704]: journalctl error test-k houdt alleen kernelberichten over en toont alleen regels sinds de huidige opstart.
journalctl -k -n 3Oct 26 10:14:25 server1 systemd-rc-local-generator[96245]: /etc/rc.d/rc.local is not marked executable, skipping.
Oct 27 10:47:57 server1 systemd-rc-local-generator[512078]: /etc/rc.d/rc.local is not marked executable, skipping.
Oct 27 11:01:10 server1 systemd-rc-local-generator[520023]: /etc/rc.d/rc.local is not marked executable, skipping.De laatste drie -k-regels op de AlmaLinux-server waren allemaal systemd-rc-local-generator-regels. Dit zijn berichten die in de logbuffer van de kernel zijn geschreven, dus ze worden opgeslagen met _TRANSPORT gelijk aan kernel en verschijnen ook bij -k.
5️⃣ Uitvoerformaten van journalctl
-o verandert het formaat van elke regel. De standaardwaarde short lijkt bijna op een syslog-bestand, en short-iso zet de tijd om naar het ISO 8601-formaat inclusief tijdzone. Na de overstap naar short-iso op de AlmaLinux-server kwam er +0000 achter de tijd.
journalctl -u crond -n 2 -o short-iso2026-10-28T07:01:01+0000 server1 run-parts[841394]: (/etc/cron.hourly) starting 0anacron
2026-10-28T07:01:01+0000 server1 CROND[841384]: (root) CMDEND (run-parts /etc/cron.hourly)cat haalt de tijd en de hostnaam weg en toont alleen het bericht, dus gebruik het als je berichten doorgeeft aan grep of een ander programma.
journalctl -u crond -n 2 -o cat(/etc/cron.hourly) starting 0anacron
(root) CMDEND (run-parts /etc/cron.hourly)json en json-pretty tonen de in het journaal opgeslagen velden als namen en waarden. Kies je velden met --output-fields, dan komen de velden voor cursor, tijd en boot-ID altijd mee. Ook toen op de Debian 12-server maar vier velden werden gekozen, verschenen __CURSOR, _BOOT_ID en twee tijdvelden mee.
journalctl -q -t myapp -n 1 -o json-pretty --output-fields=MESSAGE,PRIORITY,SYSLOG_IDENTIFIER,_PID{
"__REALTIME_TIMESTAMP" : "1793171676664200",
"_PID" : "347877",
"SYSLOG_IDENTIFIER" : "myapp",
"MESSAGE" : "follow line 2",
"__CURSOR" : "s=2a6f0c1d9e8b47a3b5c4d3e2f1a0b9c8;i=1a2b3;b=b7e3d1a04c9f4e2a8d6c5b1f0e2a9c47;m=17cf8fe36f5;t=65ee150cf1188;x=1f2e3d4c5b6a7980",
"_BOOT_ID" : "b7e3d1a04c9f4e2a8d6c5b1f0e2a9c47",
"PRIORITY" : "5",
"__MONOTONIC_TIMESTAMP" : "1636264982261"
}6️⃣ Opslaglocatie van het journaal en de grootte opschonen
Of het journaal in het geheugen of op schijf staat, bepaalt de waarde Storage= in journald.conf. De standaardwaarde auto slaat op schijf op als de map /var/log/journal bestaat, en anders in het geheugen (/run/log/journal).
De AlmaLinux-server had geen map /var/log/journal, dus het journaal stond alleen in /run/log/journal.
ls -ld /var/log/journal /run/log/journalls: cannot access '/var/log/journal': No such file or directory
drwxr-sr-x+ 4 root systemd-journal 80 Oct 17 08:30 /run/log/journalDe Debian 12-server had beide mappen, en het journaal bouwde zich op schijf op.
ls -ld /var/log/journal /run/log/journaldrwxr-sr-x+ 2 root systemd-journal 40 Oct 9 08:43 /run/log/journal
drwxr-sr-x+ 4 root systemd-journal 4096 Sep 24 12:52 /var/log/journalOm logs na een herstart te bewaren, zet je Storage= in journald.conf op persistent en herstart je systemd-journald. Volgens de officiële handleiding wordt de map /var/log/journal zo nodig automatisch aangemaakt. Voor dit artikel zijn de instellingen niet gewijzigd.
Een journaal op schijf is als de zwarte doos van een vliegtuig, die je na een incident uitleest.
--disk-usage toont de totale grootte van de gearchiveerde journaalbestanden en de bestanden die nu in gebruik zijn. Bij een gewoon account op de Debian 12-server, met de [Hint]-melding bovenaan verborgen via -q, was het resultaat één regel: 6.6M.
journalctl -q --disk-usageArchived and active journals take up 6.6M in the file system.De maximale grootte van het journaal op schijf stel je in met SystemMaxUse=. Zonder waarde is de grens 10% van de grootte van het bestandssysteem (maximaal 4G), en in de journald.conf van de Debian 12-server stond 50M.
grep -v '^#' /etc/systemd/journald.conf | grep -v '^$'[Journal]
SystemMaxUse=50MOm oude journalen direct te verkleinen, stel je met --vacuum-size de te bewaren grootte of met --vacuum-time de te bewaren periode in. Beide commando's verwijderen journaalbestanden en zijn daarom voor dit artikel niet uitgevoerd.
journalctl --vacuum-size=200M--vacuum-size=200M verwijdert gearchiveerde journaalbestanden, de oudste eerst, tot de totale grootte onder 200M ligt.
journalctl --vacuum-time=2weeks--vacuum-time=2weeks verwijdert archiefbestanden die alleen regels ouder dan 2 weken bevatten.
vacuum verwijdert alleen gearchiveerde bestanden en laat de bestanden in gebruik staan, dus ook na het uitvoeren zakt het getal van --disk-usage mogelijk niet tot de opgegeven grootte.
Tekstlogs onder /var/log worden geschreven door rsyslog, dat los van journald werkt. Daarom worden de twee logs anders gelezen en beheerd.
| Onderdeel | journald(journalctl) | rsyslog |
|---|---|---|
| Lezen | journalctl | cat, less, grep |
| Opslaglocatie | /run/log/journal of /var/log/journal | /var/log/messages (RHEL-familie) of /var/log/syslog (Debian-familie) |
| Grootte beheren | SystemMaxUse en andere in journald.conf | logrotate |
7️⃣ Leesrechten en opties van het journalctl-commando
🔲 Leesrechten
Voer je journalctl uit met een ander account dan root, dan verschijnt bovenaan een [Hint]-tekst en zie je alleen de logs die dat account schreef. Bij het zoeken naar nginx-logs met een gewoon account op de Debian 12-server kwam na de melding alleen [-- No entries --].
journalctl -u nginx -n 5Hint: You are currently not seeing messages from other users and the system.
Users in groups 'adm', 'systemd-journal' can see all messages.
Pass -q to turn off this notice.
-- No entries --Volgens id -nG hoorde dit account bij maar één groep en zat het niet in de groepen adm of systemd-journal die de melding noemt.
id -nGuserDe officiële handleiding legt uit dat accounts in de groepen systemd-journal, adm en wheel het hele journaal kunnen lezen. adm en wheel brengen ook andere rechten mee die de distributie bepaalt, en wheel staat vaak ook beheertaken toe, dus voor een account dat alleen logs leest past de groep systemd-journal.
usermod -aG systemd-journal userHet usermod-commando dat de groep toevoegt, is voor dit artikel niet uitgevoerd. Log na het toevoegen van de groep opnieuw in en controleer de groepen met id -nG. Een account met beheerdersrechten ziet ook alle logs met sudo journalctl.
De [Hint]-tekst verberg je met -q. Ook met -q zie je echter alleen de regels die dat account schreef. --user leest het gebruikersjournaal van dat account en werkt alleen op servers die het journaal op schijf opslaan. Op de Debian 12-server, die het journaal op schijf houdt, verschenen de systemd- en logger-regels van dat account.
journalctl --user -n 3Oct 28 07:12:35 server2 systemd[347665]: Reached target default.target - Main User Target.
Oct 28 07:12:35 server2 systemd[347665]: Startup finished in 181ms.
Oct 28 07:12:44 server2 myapp[347693]: journalctl test message🔲 Opties van het journalctl-commando
📌 Belangrijkste opties: resultaten uit dit artikel
| Optie | Taak | Resultaat in dit artikel | |
|---|---|---|---|
| -n regels | Alleen de laatste regels tonen; zonder getal 10 regels | -n 3 toont de laatste drie regels | |
| -r | Volgorde omdraaien, nieuwste regel bovenaan | In de crond-log staat de laatst geschreven CMDEND-regel bovenaan | |
| -f | Na de laatste regel nieuwe regels blijven tonen | De twee met logger geschreven regels volgen direct eronder | |
| -q | Meldingen zoals [Hint] verbergen | Het --disk-usage-resultaat van een gewoon Debian 12-account blijft één regel: 6.6M | |
| -u unit | Alleen de log van die service tonen | Met twee keer -u volgen op vier crond-regels twee nginx reload-regels in tijdsvolgorde | |
| -t label | Alleen logs met het label van logger -t tonen | -t myapp toont de met logger geschreven regels | |
| -g tekst | Alleen regels tonen waarvan het bericht die tekst bevat | Van de laatste twee crond-regels blijft alleen die met anacron over | |
| --since, --until | Begin en eind van het weergegeven tijdsbereik | --since '-2h' begint bij de crond-regels van 06:01 | |
| -b | Alleen logs sinds de huidige opstart; -b -1 is de vorige opstart | Op de AlmaLinux-server zonder journaal op schijf toont -b -1 alleen de melding [no persistent journal was found] | |
| --list-boots | Lijst van opstarts in het journaal | De AlmaLinux-server heeft maar één opstartrecord | |
| -p niveau | Alleen die prioriteit en belangrijkere niveaus tonen | -p err laat de notice-regel weg en alleen de err-regel over; warning..err geeft dezelfde regel | |
| -k | Alleen kernelberichten van de huidige opstart tonen | De laatste drie regels zijn allemaal systemd-rc-local-generator-regels | |
| -o formaat | Uitvoerformaat van elke regel wijzigen | short-iso zet +0000 achter de tijd; bij cat blijft alleen het bericht over | |
| --output-fields velden | Velden kiezen in json-uitvoer | Ook met maar vier gekozen velden komen __CURSOR, _BOOT_ID en twee tijdvelden mee | |
| --disk-usage | Totale grootte van de journaalbestanden tonen | 6.6M bij een gewoon account op de Debian 12-server | |
| --user | Gebruikersjournaal van dat account lezen | Op de Debian 12-server verschijnen de systemd- en logger-regels van dat account | |
| --utc | Tijden in UTC tonen | Ook op de AlmaLinux-server met eigen tijdzone gaan de tijden in de crond-log naar UTC | |
| veld=waarde | Alleen regels met die veldwaarde tonen | _PID=347704 toont alleen de ene err-regel van logger |
📎 Andere opties: volgens de officiële handleiding
| Optie | Taak | |
|---|---|---|
| --no-pager | Direct in de terminal tonen zonder less | |
| -e, --pager-end | less openen aan het eind van het journaal; zonder -n 1000 regels | |
| -x, --catalog | Uitlegtekst uit de berichtencatalogus aan logregels toevoegen | |
| -a, --all | Velden volledig tonen, ook met niet-afdrukbare tekens of zeer lange waarden | |
| -N, --fields | Alle veldnamen tonen die in het journaal worden gebruikt | |
| -F, --field= veld | Alle waarden van dat veld tonen | |
| -D map | Journaal in de opgegeven map lezen in plaats van op de standaardlocatie | |
| --file= bestand | Opgegeven journaalbestand lezen; mag meerdere keren | |
| --vacuum-size= grootte | Gearchiveerde journaalbestanden verwijderen, oudste eerst, tot onder de opgegeven grootte | |
| --vacuum-time= periode | Archiefbestanden verwijderen die alleen regels ouder dan de opgegeven periode bevatten | |
| --vacuum-files= aantal | Gearchiveerde journaalbestanden verwijderen tot het opgegeven aantal over is | |
| --rotate | Journaalbestanden in gebruik archiveren en nieuwe beginnen | |
| --flush | Journaal van het geheugen (/run/log/journal) naar schijf (/var/log/journal) verplaatsen, bij persistent-opslag |
🔲 Simulator voor het journalctl-commando
In de simulator hieronder kun je zelf commando's typen om recente logs, logs per service, tijdsbereiken, prioriteiten en uitvoerformaten te bekijken.
🔢 FAQ & aanbevolen content








ℹ️ Affiliatemelding
De content van deze site bevat affiliatelinks. Koopt een bezoeker via een van deze links een product of dienst, dan ontvangt deze site een commissie van de verkoper. Het bedrag dat de koper betaalt (bij acties gaat het omlaag ↓) wordt daardoor niet hoger. De vermelde prijzen, kortingen en voorraad gelden op het moment van schrijven en kunnen afwijken; controleer ze daarom vóór je aankoop bij de verkoper. Producten worden gekozen en beoordeeld volgens onze eigen criteria, en commissies hebben geen invloed op de volgorde of de inhoud van de beoordelingen.