Grid Guide Topics
Table of Contents
- Service Management
- System State Overview
- Unit Management
- Edit Unit Files
- Adjust System State with Targets
In this guide, you are going to learn how to use the systemctl command to manage systemd services and units, manage and check statuses of the services, check the state of a system and work with the configuration files.
Systemctl is the central management tool to control the init system and service manager. Systemd is an init system and service manager for Linux operating system. It is an upgrade for the traditional SysV init systems. It is well-known for its power, flexibility, and capability to help users do their job with minimal hassle possible and for its massive adoption as it can make administering services simpler.
For all the service management tasks, the target unit is service units with .service suffix. But, you can leave .service suffix for most of the service management commands as systemd can know that you want to operate on a service.
Start and Stop Services
Use the start command to start a systemd service. You need to use sudo before the command if you are executing with a non-root account user.
$ sudo systemctl start application.service
Or, you can simply use the below as systemd knows to show services files for service management commands.
$ sudo systemctl start application
But, In this guide, we use .service suffix for better understanding and clarity.
Use the stop command to stop a currently running service.
$ sudo systemctl stop application.service
Restart and Reload Services
Use the restart command to restart a running service.
$ sudo systemctl restart application.service
Use the reload command if the application can reload its configuration files without restarting it.
$ sudo systemctl reload application.service
Use reload-or-restart command when you are not sure if the service can reload its configuration. This command will reload the available configuration or restart the service to pick up the new configuration.
$ sudo systemctl reload-or-restart application.service
Enable and Disable Services
Use the enable command to start services automatically at boot.
$ sudo systemctl enable application.service
Use the disable command to stop services from starting automatically at boot.
$ sudo systemctl disable application.service
Check The Status of Services
Use the status command to check the status of a service if it has any problems and you may be required to take actions to resolve the errors.
systemctl status application.service
You can also check a specific state of a service using different commands. Use the is-active command to check if a service is currently running/active or not.
systemctl is-active application.service
Use the is-enabled command to check if a service is enabled or not.
systemctl is-enabled application.service
Use the is-failed command to check if a service is in failed state or not.
systemctl is-failed application.service
System State Overview
Now, you are going to learn a few systemctl commands that are useful to explore the current status of the system.
Use the list-units command to know a list of all the active units that systemd knows.
UNIT LOAD ACTIVE SUB DESCRIPTION atd.service loaded active running ATD daemon avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack dbus.service loaded active running D-Bus System Message Bus dcron.service loaded active running Periodic Command Scheduler dkms.service loaded active exited Dynamic Kernel Modules System [email protected] loaded active running Getty on tty1 . . .
You will get the same output if you call systemctl with no additional flags.
You can get different types of information as output by adding additional flags. For example, if you want to know all the units that systemd has loaded and attempted to load into memory regardless of the current state of the unit (active/inactive), use --all flag.
systemctl list-units --all
Use the --state= flag to get only in-active units or active units.
systemctl list-units --all --state=inactive
The above command calls systemctl to display only the in-active units. Replace in-active with active to get only the active units.
systemctl list-units --all --state=active
And, by using --type= flag, you can call systemctl to display only the services which you are interested in.
For example, use --type= flag to call systemctl to display only the active service units.
systemctl list-units --type=service
Listing All Unit Files
Unlike list-units, list-unit-files displays every unit file available in the systemd path, including those that systemd has not attempted to load into memory.
In the above output, you can see some of the unit files are in ‘static’ state. It means they don’t have an install section to enable a unit.
In this section, you are going to learn how to get precise information about a particular unit file using some additional commands.
Display a Unit File
Use cat command to display a unit file that systemd has loaded into its memory.
For example, run the below command to display the unit file of the atd scheduling daemon.
systemctl cat atd.service
The above output is the unit file known to the currently running systemd process.
Use the list-dependencies command to display a unit’s dependency tree. It will display a hierarchy mapping dependencies that are required to start a unit in question. Here, dependencies include the units that are required by the units above it.
systemctl list-dependencies sshd.service
Add --reverse flag to the command to display reverse dependencies. And, add --before and --after flags to command to display a specific unit starting before and after themselves respectively.
Check Unit Properties
Use show command to display low-level properties of a unit. Using a key=value format, it will display a list of properties that are set for the specified unit.
systemctl show sshd.service
Use -p flag with the property name to display a single property. For example, use the below command to display the conflicts that the sshd.service unit has.
systemctl show sshd.service -p conflicts
Mask and Unmask Units
The systemd can also mark a unit as absolutely unstartable by linking it to /dev/null. You can do this by using the mask command.
sudo systemctl mask nginx.service
In the above command, we have masked nginx services. It will prevent nginx service from starting either automatically or manually.
If you try to start the nginx service, you can see the following output.
sudo systemctl start nginx.service
Use the unmask command to unmask a specific unit.
sudo systemctl unmask nginx.service
Edit Unit Files
The systemctl provides inbuilt mechanisms to edit unit files if you want to modify them. This feature is added in systemd version 218.
Use edit command to open a unit file snippet for the unit.
sudo systemctl edit nginx.service
It will open a blank unit file to override or add directives to the unit definition. A directory will be created within the /etc/systemd/system directory with the .d affix. For example, nginx.service.d directory will be created for nginx.service directory. A snippet, override.conf, will be created within the directory. When the unit is loaded, the systemd will consolidate the snippet with the full unit file.
Use --full flag to edit the full unit file instead of creating a snippet.
sudo systemctl edit --full nginx.service
The above command will open a current unit file in an editor, where you can edit it. The modified unit file will be written to /etc/systemd/system, which will take priority over the system’s unit definition (somewhere in /lib/systemd/system).
Delete the unit’s .d configuration directory to remove any modifications you have made to the directory.
sudo rm -r /etc/systemd/system/nginx.service.d
Run the below command to remove a full modified unit file.
sudo rm /etc/systemd/system/nginx.service
After deleting the directory or file, reload the systemd process using the below command to no longer refer these files and revert for using the system files.
sudo systemctl daemon-reload
Adjust System State with Targets
Target files are individual unit files that represent the state of a system. The files that define targets are identified by their suffix, .target. Target files are used to group other units.
Get and Set the Default Target
When booting the system, the systemd process has a default target.
Use the set-default command to set a different default target.
sudo systemctl set-default graphical.target
Run the below command to display the default target for your system.
List Available Targets
Multiple targets can be active at one time. If a target is active, it means the systemd has attempted to start all the units that are tied to the target.
Use the below command to display a list of available targets on your system.
systemctl list-unit-files --type=target
Use the below command to display all the active targets.
systemctl list-units --type=target
By using the isolate command, you can start all the units tied to a target and stop all that units that are not a part of the dependency tree.
For example, if you are working in a graphical environment with graphical.target active, you can change the system into a multiuser command line by shutting down the graphical system and isolating the multi-user.target.
And, make sure you are not stopping crucial services before isolating any target. Use the below command to display a list of dependencies of the multi-user.target.
systemctl list-dependencies multi-user.target
After checking the list of dependencies and satisfied with the units, you can isolate it using the below command.
sudo systemctl isolate multi-user.target
Use Shortcuts for Important Events
The following are some of the systemctl shortcuts for essential events to enhance its functionality.
Use rescue instead of isolate rescue.target to put the system into rescue.
sudo systemctl rescue
Use the below command to halt the system.
sudo systemctl halt
Use the below command to shut down the system.
sudo systemctl poweroff
Use the below command to reboot the system.
In this guide, you have learned how to use the systemctl command to manage systemd services and units, manage and check statuses of the services, check the state of a system and work with the configuration files.