How to Manage ‘Systemd’ Services and Units Using ‘Systemctl’ in Linux

CPU Utilization (Shares) of a Service

25. Get the current CPU Shares of a Service (say httpd).

# systemctl show -p CPUShares httpd.service


Note: The default each service has a CPUShare = 1024. You may increase/decrease CPU share of a process.

26. Limit the CPU Share of a service (httpd.service) to 2000 CPUShares/

# systemctl set-property httpd.service CPUShares=2000
# systemctl show -p CPUShares httpd.service


Note: When you set CPUShare for a service, a directory with the name of service is created (httpd.service.d) which contains a file 90-CPUShares.conf which contains the CPUShare Limit information. You may view the file as:

# vi /etc/systemd/system/httpd.service.d/90-CPUShares.conf 


27. Check all the configuration details of a service.

# systemctl show httpd

Wants=system.slice systemd-journald.socket system.slice
Description=The Apache HTTP Server

28. Analyze critical chain for a services(httpd).

# systemd-analyze critical-chain httpd.service

The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.

httpd.service +142ms
└─ @11.168s
  └─network.service @9.456s +1.712s
    └─NetworkManager.service @8.858s +596ms
      └─firewalld.service @4.931s +3.926s
        └─ @4.916s
          └─ @4.916s
            └─dbus.socket @4.916s
              └─ @4.905s
                └─systemd-update-utmp.service @4.864s +39ms
                  └─auditd.service @4.563s +301ms
                    └─systemd-tmpfiles-setup.service @4.485s +69ms
                      └─rhel-import-state.service @4.342s +142ms
                        └─ @4.324s
                          └─boot.mount @4.286s +31ms
                            └─[email protected]-disk-by\x2duuid-79f594ad\x2da332\x2d4730\x2dbb5f\x2d85d196080964.service @4.092s +149ms
                              └─dev-disk-by\x2duuid-79f594ad\x2da332\x2d4730\x2dbb5f\x2d85d196080964.device @4.092s

29. Get a list of dependencies for a services (httpd).

# systemctl list-dependencies httpd.service

  │ ├─-.slice
  │ └─system.slice
  │ ├─dbus.socket

30. List control groups hierarchically.

# systemd-cgls

├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 23
│ └─user-0.slice
│   └─session-1.scope
│     ├─2498 sshd: [email protected]/0    
│     ├─2500 -bash
│     ├─4521 systemd-cgls
│     └─4522 systemd-cgls
  │ ├─4440 /usr/sbin/httpd -DFOREGROUND
  │ ├─4442 /usr/sbin/httpd -DFOREGROUND
  │ ├─4443 /usr/sbin/httpd -DFOREGROUND
  │ ├─4444 /usr/sbin/httpd -DFOREGROUND
  │ ├─4445 /usr/sbin/httpd -DFOREGROUND
  │ └─4446 /usr/sbin/httpd -DFOREGROUND
  │ └─721 /usr/lib/polkit-1/polkitd --no-debug

31. List control group according to CPU, memory, Input and Output.

# systemd-cgtop

Path                                                              Tasks   %CPU   Memory  Input/s Output/s

/                                                                    83    1.0   437.8M        -        -
/system.slice                                                         -    0.1        -        -        -
/system.slice/mariadb.service                                         2    0.1        -        -        -
/system.slice/tuned.service                                           1    0.0        -        -        -
/system.slice/httpd.service                                           6    0.0        -        -        -
/system.slice/NetworkManager.service                                  1      -        -        -        -
/system.slice/atop.service                                            1      -        -        -        -
/system.slice/atopacct.service                                        1      -        -        -        -
/system.slice/auditd.service                                          1      -        -        -        -
/system.slice/crond.service                                           1      -        -        -        -
/system.slice/dbus.service                                            1      -        -        -        -
/system.slice/firewalld.service                                       1      -        -        -        -
/system.slice/lvm2-lvmetad.service                                    1      -        -        -        -
/system.slice/polkit.service                                          1      -        -        -        -
/system.slice/postfix.service                                         3      -        -        -        -
/system.slice/rsyslog.service                                         1      -        -        -        -
/system.slice/system-getty.slice/[email protected]                   1      -        -        -        -
/system.slice/systemd-journald.service                                1      -        -        -        -
/system.slice/systemd-logind.service                                  1      -        -        -        -
/system.slice/systemd-udevd.service                                   1      -        -        -        -
/system.slice/webmin.service                                          1      -        -        -        -
/user.slice/user-0.slice/session-1.scope                              3      -        -        -        -

Control System Runlevels

32. How to start system rescue mode.

# systemctl rescue

Broadcast message from [email protected] on pts/0 (Wed 2015-04-29 11:31:18 IST):

The system is going down to rescue mode NOW!

33. How to enter into emergency mode.

# systemctl emergency

Welcome to emergency mode! After logging in, type "journalctl -xb" to view
system logs, "systemctl reboot" to reboot, "systemctl default" to try again
to boot into default mode.

34. List current run levels in use.

# systemctl get-default

35. How to start Runlevel 5 aka graphical mode.

# systemctl isolate
# systemctl isolate

36. How to start Runlevel 3 aka multiuser mode (commandline).

# systemctl isolate
# systemctl isolate

36. How to set multiusermode or graphical mode as default runlevel.

# systemctl set-default

# systemctl set-default

37. How to reboot, halt, suspend, hibernate or put system in hybrid-sleep.

# systemctl reboot

# systemctl halt

# systemctl suspend

# systemctl hibernate

# systemctl hybrid-sleep

For those who may not be aware of runlevels and what it does.

  1. Runlevel 0 : Shut down and Power off the system.
  2. Runlevel 1 : Rescue?Maintainance Mode.
  3. Runlevel 3 : multiuser, no-graphic system.
  4. Runlevel 4 : multiuser, no-graphic system.
  5. Runlevel 5 : multiuser, graphical system.
  6. Runlevel 6 : Shutdown and Reboot the machine.

That’s all for now. Keep connected! Keep commenting. Don’t forget to provide us with your valuable feedback in the comments below. Like and share us and help us get spread.

Best Affordable Linux and WordPress Services For Your Business
Outsource Your Linux and WordPress Project and Get it Promptly Completed Remotely and Delivered Online.

If You Appreciate What We Do Here On TecMint, You Should Consider:

  1. Stay Connected to: Twitter | Facebook | Google Plus
  2. Subscribe to our email updates: Sign Up Now
  3. Get your own self-hosted blog with a Free Domain at ($3.45/month).
  4. Become a Supporter - Make a contribution via PayPal
  5. Support us by purchasing our premium books in PDF format.
  6. Support us by taking our online Linux courses

We are thankful for your never ending support.

RedHat RHCE and RHCSA Certification Book
Linux Foundation LFCS and LFCE Certification Preparation Guide

You may also like...

18 Responses

  1. ROMSAT says:

    Superb pots. I would just like to add that all those system services also generate logs. With systemd, these logs can be managed centrally with another component called journalctl. The main configuration file is in /etc/systemd/journald.conf.
    Fear that you could dedicate another magnificent pots. Thanks a lot.

  2. Frank says:

    I would like to know about the relationship of numbering of files such as this in your teachings:

    I used a similar scheme with a .network file as seen in some tutorials. For Example:
    My belief is that the lower number .network file starts first?? Are these just arbitrary numbers? Could I use in the same fashion?? 99-* seems to be the last number called up.

    Also these numbers schemes look like what I see in UDEV as well…

    Keep up the great work

  3. Frank says:

    Really useful guide.
    Keep up the great work.
    I see one command not covered that I use alot.
    systemctl reenable
    This allows the unit file to reload and writes a new symbolic link to /usr/lib/

    I have also found the systemctl edit –full allows you to edit the unit control file in /etc/systemd/system folder. Helpful for setting the After= setting for controlling the startup order of services.

    • Ravi Saive says:


      Thanks for appreciating our work and giving us valuable tip, we’ve will check and add to the list as per your suggestions.

      • Frank says:

        Thank You
        Just to be clear the “systemctl edit –full” needs a service to work on. For example:
        systemctl edit –full hostapd

        To this file I add-
        To have hostapd wait for dnsmasq to start first.

        It saves the file with an odd file extension that is actually the unit file. Just edit and save(ignore name). Another advantage with this method is that it reloads and reenables the service thus writing the needed symbolic links for you with a single swoop.

  4. Jan Vlčinský says:

    Nice and extensive overview of available commands.

    Question: For controlling our applications we use supervisord, which allows one-shot commands as you present here, but also provides interactive shell, where one can call commands like “start svcA”, “restart svcB”, “tail svcA”, or even “follow mode” “tail -f svcA”. The interactive mode is very handy as it does not require typing so long commands.

    Question: is there any interactive console controlling systemd defined services?

    • Ravi Saive says:


      Thanks for the tips, never ever heard about supervisord, let me check how it works and also to be fact I really don’t have any idea in controlling systemd via interactive shell, let me check and get back to you..

  5. Rizal Rahman says:

    very complete handy cheat sheet that i should bookmark it now! thanks!

  6. Jalal Hajigholamali says:

    Very nice article
    thanks a lot

  7. sys0dm1n says:

    Thanks, I am still running nix distro with init but will be useful some day when using systemd.

    • Avishek Kumar says:

      :) if you don’t start using systemd, you will be left behind in the fast moving Linux World.

  8. CertDepot says:

    ‘systemd –version’ doesn’t work. It is ‘systemctl –version’ that works.

    • Avishek Kumar says:

      # systemd-run –version

      You may thank me later. :)

      • MCBuhl says:

        I’d thank you even more if yo’d correct it in the blog post – as I had the same error as CertDepot
        + copy-pasting runs into error, too, because “–” is altered into a long “-“: Failed to find executable –version: No such file or directory

        • Donald Harvey says:

          I love the conciseness of how-to posts like this one. But yeah, fast-forward 3 yrs and ‘systemd –version’ is still in the blog post. If one needs to read comments to get the correct info, then that whole conciseness thing goes out the window.

  9. Bill M says:

    Thanks for the in-depth how-to on using the systemd control system tool. Lots of great examples!

Got something to say? Join the discussion.

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.