Hi, today we will learn managing Linux services with systemd or systemctl. While Linux kernel booting, it loads drivers, mount file systems, starting memory management, creating system calls, etc. But after that what? Linux starts an init process to create a further system and user services and processes. To manage system services we need a tool which is generally systemd. With these tools we can set the status of a service, see it. Also, we can change the mount and system snapshot issues. But we will only look for service management side. By the way, a service is a daemon which works background to complete his workloads. Apache, MySQL etc are services.
List Existing Services
To see all running services run systemctl command. As you can see from output systemctl list devices,ttys,services,files system related service.
Print/Display Service Status
To see the status of service use systemctl status. You can see process id traffic info, service name, and latest logs.
$ systemctl status httpd
- `Loaded` is the service configuration path
- `Active` specify the status of the service which is Active in this example also the date when the service is started is provided.
- `Docs` specifies the documentation name of the service
- `Main PID` is the service main process ID which is 59634
- `Status` is the human-friendly form of the service status where “Running, listening on: port 80” in this example
- `Tasks` is the total task count which is 213 in this example
- `Memory` is the ram or memory usage of this service which is 17.9 MB in this example.
- `CGroup` is the security group of the service
We can start a service with the
start option and providing the service name we want to start. In this example, we will start the service named httpd.
$ systemctl start httpd
We can stop a service or daemon with the
stop option to the
systemctl command. In this example, we will stop service named
httpd which is named
apache2 in Ubuntu.
$ systemctl stop httpd
Start Service At Boot
To enable a service starts in startup use systemctl enable httpd. It creates a soft link for the current init level which is multi-user
$ systemctl enable httpd ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
Disable Service Startup At Boot
If a service is enabled it will during boot automatically. In order to prevent to start a service during boot, we have to disable it with the
disable option and providing the service name. In this example, we will disable the service named httpd.
$ systemctl disable httpd rm '/etc/systemd/system/multi-user.target.wants/httpd.service'
Print Service Startup Status At Boot
Check a service about enabled status
$ systemctl is-enabled httpd disabled
In Linux, UNIX systems there are 2 run levels which are mostly used. A run level is the status of a system for example if you do not need graphic interface but need networking a multi-user you use runlevel3 or multiuser run level, if you need GUI then you change to run level 5 or graphical. In these run levels, appropriate services started.
First, look current run level.
$ runlevel N 3
Change to multi-user run level which is current
$ systemctl isolate multi-user.target $ runlevel N 3
Change to graphical run level.
$ systemctl isolate graphical.target $ runlevel 3 5
Set Default System Run Level
To change default start run level or target
$ systemctl set-default graphical.target rm '/etc/systemd/system/default.target' ln -s '/usr/lib/systemd/system/graphical.target' '/etc/systemd/system/default.target' $ systemctl set-default multi-user.target rm '/etc/systemd/system/default.target' ln -s '/usr/lib/systemd/system/multi-user.target' '/etc/systemd/system/default.target'
Create Service Snapshot
To create a snapshot of the current system and services status use systemctl snapshot. This is not disk snapshot just service snapshot. Say you start 25 services and do not want to do all the time you can snapshot this and then easily recall the snapshot. If you want you can give the name of the snapshot after snapshot command
$ systemctl snapshot snapshot-1.snapshot
Revert Service To Snapshot
We can reload or revert to the snapshot with the
isolate command like below.
$ systemctl isolate snapshot-1.snapshot
Delete Service Snapshot
Existing snapshots can be deleted with the
delete option. In this example, we will delete snapshot
$ systemctl delete snapshot-1.snapshot
Show Service Parameters and Details
To see service parameters and details which resides in the service file.
$ systemctl show httpd