Meet the systemd, or short introduction
systemd – is initialization system for other demons to Linux, which came to replace the previously used /sbin/init. Its special feature is the intensive parallelization while start services at boot time, which can significantly speed up the launch of the operating system.
The name comes from the Unix suffix «d» to the demon (c) Wikipedia. In this article, we will speak only about CentOS, but of course, this will also be true for other systems.
A problem often encountered in systemd, when even with seemingly correct configuration, the service does not start. Looking through the logs, you can understand that mistakes are usually standard – for the example of httpd he can not listen to the port, or resolve ldap user. After many experiments, we found the optimal configuration scripts that run in servers correctly.
All startup scripts are in the directory /lib/systemd/system
Apache
The file is called httpd.service. The problem is that he did not work until until network subsystem will not loaded and resolving ldap users. For Apache start network-online.target, nss-lookup.target and nss-user-lookup.target must be loaded before Apache. It is easy to understand, if you take a look on config file below:
[Unit] Description = The Apache HTTP Server After = network-online.target remote-fs.target nss-lookup.target nss-user-lookup.target Documentation = man: httpd (8) Documentation = man: apachectl (8) [Service] Type = notify EnvironmentFile = /etc/sysconfig/httpd ExecStart = /usr/sbin/httpd $ OPTIONS -DFOREGROUND ExecReload = /usr/sbin/ httpd $ OPTIONS -k graceful ExecStop = /bin/kill -WINCH $ {MAINPID} KillSignal = SIGCONT PrivateTmp = true [Install] WantedBy = multi-user.target
Configuring Apache additional instances in systemd
In order to configure Apache to work on multiple ports at once (additional instances or “profiles”), you need to do a little creative action.
Create Apache configs
Additional Apache will listen to another port, so we need an another config file, which will be described. For example, here is this one.
Listen 192.168.150.214:8001 Include conf/Includes/ *. Conf Include conf/hosting/ *. Conf Include conf/vhosts/ *. Conf CustomLog "/var/log/apache/access1.log" combined env =! Dontlog ErrorLog "/var/log/apache/error1.log" User apache Group apache PidFile /var/run/httpd/httpd1.pid
You must specify a folder with our configs, by analogy with the standard the httpd.conf, be sure to rename the name of the log, enter the user/group of the web server and the pid-file. In fact nothing more is needed for configuration. Let’s call httpd1.conf file for port 8001, httpd2.conf for port 8002 and then more, by analogy, if you need more.
Edit files with parameters
To get started, copy a file from the folder / etc / sysconfig
# Cp httpd httpd1
If you need to do more profiles, copy as needed.
Next, edit the copied a file. Do not touch the default file. All that should be in it, it’s two lines:
OPTIONS = -f conf / httpd1.conf LANG = C
More, in fact, do not need anything. As you guessed, conf / httpd1.conf is a workpiece Apache config, which we did in the preceding paragraph.
Make and run the service
So, go to the folder with start scripts systemd
# Cd /lib/systemd/system
Copy the current service and a file called names by analogy with configs and files from the sysconfig
# Cp httpd.service httpd1.service.
Edit the config file which we COPIED before, leaving intact a default one
# EnvironmentFile = /etc/sysconfig/httpd
Replace the created us
# EnvironmentFile = /etc/sysconfig/httpd1
Save, switch service on
# Systemctl enable httpd1
Run it
# Systemctl start httpd1.service
Or so – also fulfills
# Systemctl start httpd1
So, you have additional instance Apache.
nginx
nginx.service adjusted by analogy – the main thing that against official documentation in “After” was present network-online.target. Also, it is important (applies also, and apache) remote-fs.target option – any occurred after loading it as a Web server files can take, for example, GlusterFS.
[Unit] Description = The NGINX HTTP and reverse proxy server After = syslog.target network-online.target remote-fs.target nss-lookup.target [Service] Type = forking PIDFile = /run/nginx.pid ExecStartPre = /usr/sbin/nginx -t ExecStart = /usr/sbin/nginx ExecReload = /bin/kill -s HUP $ MAINPID ExecStop = /bin/kill -s QUIT $ MAINPID PrivateTmp = true [Install] WantedBy = multi-user.target
Zabbix
Similarly configs web server, you need to change in the default script
After = network.target On After = network-online.target
Commands
For easy management, systemd has a large number of commands. Know all of them is not necessarily, but here is a list of basic and necessary good to know.
List
In the case if you edited boot scripts and other components systemd, you can restart it by command:
systemctl daemon-reload
Generate a report on the boot systemd and put it in a file (by the way, it is very useful for understanding the operation of systemd)
systemd-analyze plot> /home/vtorov/boot.svg
Take a look what services are loaded in systemd, or enabled while system start
systemctl list-units --type service
As above, but more and shows the “Target”
systemctl list-units
Switching on and off, reload/restart the service, or other actions (see them below)
systemctl <action> <object>
That is, for example,
systemctl restart httpd
Where restart is an action, but httpd is an object. The list of actions below.
Actions
reload restart enable disable stop start status
By the way, old chkconfig, redirecting their actions into systemd, but because it will soon be expelled from the CentOS, then to use it is not necessary to devote more time and systemd.
Recent Comments