798

I check service status with systemctl status service-name.

By default, I see few rows only, so I add -n50 to see more.

Sometimes, I want to see full log, from start. It could have 1000s of rows.
Now, I check it with -n10000 but that doesn't look like neat solution.

Is there an option to check full systemd service log similar to less command?

1
  • 3
    While the accepted answer wasn't useful for me, I was not aware of the -n flag. Adding -n99999 seems to be an acceptable workaround for me. Thanks for pointing me in the right direction :-)
    – tobixen
    Jun 26, 2019 at 5:00

6 Answers 6

1140

Just use the journalctl command, as in:

journalctl -u service-name.service

Or, to see only log messages for the current boot:

journalctl -u service-name.service -b

For things named <something>.service, you can actually just use <something>, as in:

journalctl -u service-name

But for other sorts of units (sockets, targets, timers, etc), you need to be explicit.

In the above commands, the -u flag is short for --unit, and specifies the name of the unit in which you're interested. -b is short for --boot, and restricts the output to only the current boot so that you don't see lots of older messages. See the journalctl man page for more information.

14
  • 80
    appending --no-pager will print full log, so you wont have to scroll May 29, 2017 at 11:41
  • 98
    appending -e will start the log at the end removing the need to scroll, but without printing the entire log beforehand.
    – timlyo
    Jul 28, 2017 at 14:45
  • 130
    appending -f will follow (print) updates to the log
    – Joe J
    Sep 6, 2017 at 17:10
  • 69
    appending --help will let you see all available options
    – Tzafrir
    Mar 26, 2018 at 20:14
  • 7
    Actually, this was not helpful for me - I want only the output since the unit was (re)started. sudo systemctl -n 99999 status gives me that, but apparently journalctl can only filter "from boot", not "from service start".
    – tobixen
    Jun 26, 2019 at 4:57
55

systemctl can include the complete output of its status listing, without truncation., by adding the -l flag:

systemctl -l status service-name

-l: don't truncate entries with ellipses (...)

--no-pager can be added to avoid invoking a pager when the output is an interactive terminal.

4
  • 7
    Could you explicit your answer somehow? Adding some explanation about the options, and don't hesitate to format your answer!
    – joH1
    Jan 24, 2018 at 10:20
  • 29
    This answer is wrong. The output stays truncated.
    – phil294
    Oct 30, 2018 at 14:21
  • might not be best for current one, but gods... it will make my life easier going forward :D
    – Tom St
    Aug 14, 2021 at 14:51
  • Since this no longer works on my system, I've posted another answer that makes it posible to get the full logs via systemctl (with full support to journalctl's options to boot). It's a hack but it's been working great for me so far. Oct 17, 2021 at 8:22
26

Use journalctl to View Your System's Logs

View journalctl without PagingPermalink To send your logs to standard output and avoid paging them, use the --no-pager option:

journalctl --no-pager

It’s not recommended that you do this without first filtering down the number of logs shown.

journalctl -u service-name.service

Show Logs within a Time RangePermalink Use the --since option to show logs after a specified date and time:

journalctl --since "2018-08-30 14:10:10"

Use the --until option to show logs up to a specified date and time:

journalctl --until "2018-09-02 12:05:50"

Combine these to show logs between the two times:

journalctl --since "2018-08-30 14:10:10" --until "2018-09-02 12:05:50"

More info

16

Most of the time, it is convenient and easy to use the following bash command:

journalctl -xefu service-name.service

or

journalctl -xefu service-name

It works as if the process is executed via shell and the output is changing dynamically (similar to tail -f).

1
  • 1
    This is the only answer that shows if a unit has been started or stopped (or likewise restart).
    – Dave
    Mar 11 at 14:19
12

using journalctl

write logs to a text file

and read it bottom up

journalctl -u service-name.service > file_name.txt

tail file_name.txt
2
  • Which tail command supports option -r, and what does it do?
    – RalfFriedl
    Nov 19, 2019 at 6:29
  • I like this answer the best. Was able to quickly get real-time log output to a file that I could then winscp to snag it from a Windows box. Sep 9, 2020 at 15:58
0

Since @Julien's answer no longer appears to work on my system (Debian 11), I've finally given in and hijacked systemctl on my system:

systemctl() { 
    if [[ "${1-}" == "log" ]]; then  
        /usr/bin/journalctl -u "${@:2}"; 
    else /usr/bin/systemctl "$@";
    fi 
}

Add this oneliner to your .bashrc and your systemctl will gain a new log "verb" that provides the missing functionality. No more wasting time retyping tedious commands.

As an added bonus, this method will also give you access to all the options of journalctl (provided that they're specified after the unit name):

systemctl log named.service --since=today

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.