System D process management

Posted by juuuugroid on Tue, 28 Dec 2021 17:37:02 +0100

systemd introduction

systemd is the main system daemon management tool on Linux system at present. On the one hand, init manages the process serially, which is prone to blocking. On the other hand, init only executes the startup script and cannot manage the service itself. Therefore, starting from CentOS 7, init has been replaced by systemd as the default system process management tool.

All system resources managed by systemd are called units. These units can be easily managed through the systemd command set. For example, systemctl, hostnamectl, timedatectl, localctl and other commands have rewritten the command usage habits of users in the init era (no longer using chkconfig, service and other commands), but they do provide great convenience.

systemd features

  • The latest systems are managed by systemd (RedHat7, CentOS7, Ubuntu 15...)
  • CentOS7 supports parallel startup service, which significantly improves startup efficiency
  • When CentOS7 is shut down, only running services are shut down, while CentOS6 is shut down once.
  • The start and stop of CentOS7 services are no longer managed by scripts, that is, / etc / init There is no script under D.
  • CentOS7 uses systemd to solve the defects of the original mode. For example, the original service will not close the subprocess generated by the program.

systemd syntax

systemctl [command]      [unit](Configured app name)

command Optional
· start: Start the specified unit          systemctl start nginx
· stop: Close the specified unit           systemctl stop nginx
· restart: Restart specified unit          systemctl restart nginx
· reload: Overload assignment unit           systemctl reload nginx
· enable: Automatically start the specified when the system is powered on unit,The premise is that there are relevant configurations in the configuration file systemctl enable nginx
· disable: Do not automatically run the specified at startup unit   systemctl disable nginx
· status: View assignments unit Current running status systemctl status nginx

systemd configuration file description

  • Each Unit needs a configuration file to tell systemd how to manage services
  • The configuration file is stored in / usr/lib/systemd/system /. After startup, a soft link file will be established in the / etc/systemd/system directory
  • The default suffix for the configuration file configuration of each Unit is service
  • The / usr/lib/systemd/system / directory is divided into two directories: system and user. Generally, programs that can run without login after startup are stored in the system service, that is, / usr/lib/systemd/system
  • The configuration file is divided into multiple parts using square brackets and is case sensitive

systemd related files

Actual combat I

Source code compilation and installation nginx to realize systemd management control

Install nginx compilation environment

yum  -y install gcc gcc-c++    openssl-devel pcre-devel gd-devel  iproute net-tools telnet wget curl
wget http://nginx.org/download/nginx-1.15.5.tar.gz
tar zxf nginx-1.15.5.tar.gz &&
cd nginx-1.15.5
./configure --prefix=/usr/local/nginx \
    --with-http_ssl_module \
    --with-http_stub_status_module 
make -j 4 && make install

Start nginx in general mode

/usr/local/nginx/sbin/nginx  #start-up
/usr/local/nginx/sbin/nginx  -s reload  #restart
/usr/local/nginx/sbin/nginx -s   quit   #Close nginx

systemd management control startup mode

vim      /usr/lib/systemd/system/nginx.service

[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Detailed explanation of parameters

systemctl restart nginx
systemctl enable  nginx
systemctl stop  nginx

Actual combat II

Implementing system D management control by installing tomcat binary

Install the java environment. I have packaged the installation package on my server. You can also download it on the official website

wget  120.78.77.38/file/jdk-8u231-linux-x64.rpm
wget  120.78.77.38/file/apache-tomcat-9.0.27.tar.gz
rpm -ivh  jdk-8u231-linux-x64.rpm    #rpm direct mount jdk

Configure environment variables

vim    /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_231-amd64
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export  PATH=${JAVA_HOME}/bin:$PATH 
source   /etc/profile
java -version   #Detection environment

Install tomcat

tar  -xf  apache-tomcat-9.0.27  
mv  apache-tomcat-9.0.27  /usr/local/tomcat
 start-up tomcat
sh    /usr/local/tomcat/bin/startup.sh   #start-up
sh   /usr/local/tomcat/bin/shutdown.sh #close

systemd management control startup

vim      /usr/lib/systemd/system/tomcat.service

[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target

[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_231-amd64"
Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
systemctl restart tomcat  #start-up
systemctl enable tomcat   #Configure auto start
systemctl stop  tomcat   #Out of Service
systemctl status  tomcat  #Detection status

The above two actual nginx and tomcat programs have their own start and stop scripts. If the started program does not have its own script, you need to write a similar start and stop script yourself

Actual combat III

Deploy jar program to realize system D management control

In the actual project, some jar programs need to be started. If you start manually, you need to enter a large series of commands. If you stop, you need to kill the process to stop. It's very troublesome

Take an example of actual startup. Switch to the jar directory

java -jar decode.jar -Dconfig=/usr/local/abc/application.properties

Write a startup script

vim  demo.sh

#!/bin/bash
#

source /etc/profile
jarName="abc-web.jar"
workDir="/usr/local/abc"

start(){
    cd ${workDir} && java -jar ${jarName} --spring.profiles.active=prod --server.port=9630 >uams.log 2>&1 &
}

stop(){
    ps -ef | grep -qP "(?<=-jar)\s+${jarName}" && kill $(ps -ef | grep -P "(?<=-jar)\s+${jarName}" | awk '{print $2}')
}

case $1 in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
esac

Write systemd configuration file

vim  /usr/lib/systemd/system/abc.service

[Unit]
Description=uams server
Wants=network-online.target
After=network.target

[Service]
Type=forking
WorkingDirectory=/usr/local/abc/
ExecStart=/bin/bash uams.sh start
ExecStop=/bin/bash uams.sh stop
ExecReload=/bin/bash uams.sh restart
Restart=on-failure

[Install]
WantedBy=multi-user.target

Start abc service

systemctl restart abc  #start-up
systemctl enable abc   #Configure auto start
systemctl stop  abc   #Out of Service
systemctl status  abc  #Detection status

Click“ Read the original text "Get a better reading experience!

Topics: Linux Kubernetes