Systemd
Systemd is a software suite that provides an array of system components for Linux operating systems. Its main aim is to unify service configuration and behavior across Linux distributions.
Systemd's primary component is a "system and service manager" an init system used to bootstrap user space and manage user processes. It also provides replacements for various daemons and utilities, including device management, login management, network connection management and event logging.
How to manage systemd services and units
Official systemctl documentation.
The systemctl command is the central management tool for controlling the init system.
In the following table you can find some interesting commands related to systemctl.
Command | Description |
---|---|
systemctl start <service_name> |
It is used to start a service during the current session. |
systemctl stop <service_name> |
It is used to stop a service during the current session. |
systemctl restart <service_name> |
It is used to restart a running service. |
systemctl reload <service_name> |
It is used to reload the configuration files of a service. |
systemctl enable <service_name> |
It is used to start services automatically at boot. |
systemctl disable <service_name> |
It removes the symbolic link which makes the services start automatically at boot. |
systemctl status <service_name> |
It is used to see the status of a determined service. |
systemctl list-units |
It shows a list of all of the active units that systemd knows about. |
How to use journalctl to view and manipulate systemd logs
Official journalctl documentation.
The journald daemon is a centralized management solution for logging all kernel and userland processes.
To see the logs that the journald daemon has collected, use the journalctl
command.
In the following table you can find some interesting commands related to journalctl.
Command | Description |
---|---|
journalctl -u node-red --since "2021-11-10" --until "2021-11-11 03:00" |
The logs related with Node-RED service from 2021-11-10 to 2021-11-11 until 03:00 will be displayed. |
journalctl -u node-red --since yesterday |
The logs related with Node-RED service from the previous day until the current moment will be displayed. |
journalctl -u node-red --since 09:00 --until "1 hour ago" |
The logs related with Node-RED service from 09:00 until 1 hour before the command was sent will be displayed. |
journalctl _PID=177 |
You will see the logs of the process with PID = 177. |
journalctl -n 20 |
You will see the last 20 entries. |
journalctl --list-boots |
It is used to see the boots that journald knows about. |
journalctl -b -1 |
It is used to see the journal from the previous boot. |
journalctl --verify |
It checks the journal file for internal consistency. |
journalctl --disk-usage |
It shows the sum of the disk usage of all archived and active journal files. |
journalctl --vacuum-size=20M |
It removes the oldest archived journal files until the disk space they use falls below the specified size. |
journalctl --vacuum-time=2weeks |
It removes all archived journal files contain no data older than the specified timespan. |
Timesyncd
Official timesyncd documentation.
Timesyncd is a system service that may be used to synchronize the local system clock with a remote Network Time Protocol (NTP) server. The eManager integrates this NTP service (systemd-timesyncd), to syncronize time to public NTP hosts.
The public NTP servers used are:
- time1.google.com
- time2.google.com
- time3.google.com
- time4.google.com
This service is started by default and the time synchronization will be carried out at the beggining.
In the following table you can find some interesting commands related to this service.
Command | Description |
---|---|
timedatectl |
It shows the current settings. |
timedatectl timesync-status |
It shows the current status of systemd-timesyncd service. |
timedatectl set-timezone UTC |
It is used to set the coordinated universal time (UTC). |
timedatectl set-timezone America/Santiago |
It is used to set the Santiago de Chile zone. |
timedatectl list-timezones |
It shows the available timezones. |
timedatectl set-time '2020-01-01 00:00' |
It is used to set new time. |
Resolved
Official resolvectl documentation.
The resolvectl service may be used to resolve domain names, IPv4 and IPv6 addresses, DNS resource records and services.
In the following table you can find some interesting commands related to this service.
Command | Description |
---|---|
resolvectl status |
It shows the global and per-link DNS settings currently in effect. |
resolvectl status eth0 |
It shows eth0 interface DNS settings currently in effect. |
resolvectl status wlan0 |
It shows wlan0 interface DNS settings currently in effect. |
resolvectl status ppp0 |
It shows ppp0 interface DNS settings currently in effect. |
resolvectl query www.pickdata.net |
It resolve domain names, as well as IPv4 and IPv6 addresses. |
resolvectl flush-caches |
It cleans the DNS cache on Linux. |
How to create a systemd.service
Official systemd.service documentation.
Two files are needed:
- executable file: binary file, bash script, python script, etc.
- service file:
*.service
INI-like file that configures the service. It defines when the executable file is run, restarted, etc.
Step 1. Create an executable file
Create the <executable_name>
file that will be run by the service. It is a good practice to place it at /usr/local/bin
.
Give it execute permission with
Step 2. Create a configuration file for the service
Create a file in /lib/systemd/system
of the form
[Unit]
# unitOption1=value1
# unitOption2=value2
[Service]
ExecStart=/path/to/the/<executable_name>
# serviceOption2=value2
# serviceOption3=value3
[Install]
# installOption1=value1
# installOption2=value2
[Install]
section can be skiped. Do skip it when creating a systemd.timer.
Step 3. Reload unit changes from disk
For systemd
to reload the added/modified units files use:
Step 4. Enable and start the service
To enable the service use
To start the service use
being<service_name>
the name of the service.
Example 1. Save the current timestamp each minute
Steps
First, create the folder:
Then, copy the files:
Give /usr/local/bin/timestamp_each_minute.sh
execute permission
How to create a systemd.timer
Official systemd.timer documentation.
To create a systemd.timer it is important to create it as a Linux service. To do so, three files are needed:
- executable file
- service file
- task file
Step 1. Create the service and executable files
Follow Steps 1 and 2 of How to create a systemd.service.
Step 2. Create the timer unit file
Create a timer unit file <service_name>.timer
in /lib/systemd/system/
with
<service_name>
must be the name of the <service_name>.service
created in Step 1.
This file should contain three sections:
[Unit]
# unitOption1=value1
# unitOption2=value2
[Timer]
# serviceOption1=value1
# serviceOption2=value2
[Install]
# installOption1=value1
# installOption2=value2
Step 3. Reload unit changes from disk
For systemd
to reload the added/modified units use:
Step 4. Activate and start the timer
To enable the service use
To start the service use
Example 1. Save the current timestamp each minute
Steps
First, create the folder:
Then, copy the files:
Give /usr/local/bin/timestamp_each_minute.sh
execute permission