How to debug systemd problems

Caleb McKee, Petr Bokoc, Peter Boy Version F32 Last review: 2020-04-10

If you are experiencing a problem with system boot-up due to systemd, please see the commonbugs document before filing a bug. Some easy configuration tweaks that fix a wide range of issues may be listed there. If the problem you are seeing is not listed there or none of the workarounds seem to help, please consider filing a bug to help us make Fedora run better on your hardware.

Have a look at the upstream project’s helpful documentation on the topic.

  • List all jobs that are "running" or "waiting". This command can be used to identify causes of a slow boot. The boot process waits for "running" jobs to complete. Jobs listed as "waiting" will only be executed after "running" jobs have completed.

    […]# systemctl list-jobs
  • List all available services and their current status

    […]# systemctl list-units -t service --all
  • Show all active services

    […]# systemctl list-units -t service
  • Examine the current runtime status of a service. (In this example the ssh service)

    […]# systemctl status sshd.service
  • Show all available targets.

    […]# systemctl list-units -t target --all
  • Show all active targets.

    […]# systemctl list-units -t target
  • Display which services a target pulls in. ( In this example the multi-user.target )

    […]# systemctl show -p "Wants" multi-user.target
  • Examine what gets started when booted into a specific target. (in this example the multi-user.target)

    […]# /usr/lib/systemd/systemd --test --system --unit=multi-user.target

Various useful systemd boot parameters

The following boot parameters are also available to further assist with debugging boot issues.

systemd.unit=

Overrides the unit to activate on boot. This may be used to temporarily boot into a different boot unit, for example rescue.target or emergency.target. Defaults to default.target.

systemd.dump_core=

Takes a boolean argument. If true, systemd dumps the core when it crashes. Otherwise no core dump is created. Defaults to true.

systemd.crash_shell=

Takes a boolean argument. If true, systemd spawns a shell when it crashes. Otherwise no core dump is created. Defaults to false, for security reasons, as the shell is not protected by any password authentication.

systemd.crash_chvt=

Takes an integer argument. If positive, systemd activates the specified virtual terminal when it crashes. Defaults to -1.

systemd.confirm_spawn=

Takes a boolean argument. If true, asks for confirmation when spawning processes. Defaults to false.

systemd.show_status=

Takes a boolean argument. If true, shows terse service status updates on the console during bootup. Defaults to true.

systemd.sysv_console=

Takes a boolean argument. If true, output of SysV init scripts will be directed to the console. Defaults to true, unless quiet is passed as kernel command line option in which case it defaults to false.

systemd.log_target=

Sets the log target. Argument must be console, syslog, kmsg, yslog-or-kmsg, or null.

systemd.log_level=

Sets the log level. This command accepts a numerical log level or the well-known syslog symbolic names (lowercase): emerg, alert, crit, err, warning, notice, info, debug as an argument.

systemd.log_color=

Highlights important log messages. Argument is a boolean value. If the argument is omitted, it defaults to true.

systemd.log_location=

Includes code location in log messages. This is mostly relevant for debugging purposes. Argument is a boolean value. If the argument is omitted it defaults to true.

See a typo, something missing or out of date, or anything else which can be improved? Edit this document or provide a comment using the buttons above on the right side below gthe blue header banner.