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 the service management side. By the way, a service is a daemon that 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 with systemctl Command
To see the status of service use systemctl status. You can see process id traffic info, service name, and latest logs.
$ systemctl status httpd
Loadedis the service configuration path.
Activespecify the status of the service which is Active in this example also the date when the service is started is provided.
Docsspecifies the documentation name of the service.
Main PIDis the service main process ID which is 59634.
Statusis the human-friendly form of the service status where “Running, listening on: port 80” in this example.
Tasksis the total task count which is 213 in this example.
Memoryis the ram or memory usage of this service which is 17.9 MB in this example.
CGroupis the security group of the service.
Start Service with systemctl Command
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
Stop Service with systemctl Command
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 with systemctl Command
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 with systemctl Command
If a service is enabled it will during boot automatically. In order to prevent starting 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 AutoStart or Enabled Status
Check a service about enabled status.
$ systemctl is-enabled httpd disabled
In Linux, UNIX systems there are 2 run levels that are mostly used. A run level is the status of a system for example if you do not need a 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 with systemctl Command
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 with systemctl Command
To create a snapshot of the current system and services status use systemctl snapshot. This is not a 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 with systemctl Command
We can reload or revert to the snapshot with the
isolate command like below.
$ systemctl isolate snapshot-1.snapshot
Delete Service Snapshot with systemctl Command
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 with systemctl Command
To see service parameters and details which resides in the service file.
$ systemctl show httpd