目录
1、认识service的unit文件
2、systemd 使用语法
3、service unit文件的例子
案例:
1.源码编译安装nginx 实现systemd管理控制
2. 二进制安装tomcat 实现systemd管理控制
在不同的Linux版本中,管理服务的方式不尽相同,主要分界限在RHEL/CentOS6版本,也就是说,在CentOS6 以及之前版本中,写服务脚本,需要放在/etc/init.d/目录下,这些脚本都是bash脚本,且脚本编写较复杂。而 在CentOS7/RHEL7以及以后版本中,采用了一种叫unit的配置文件来管理服务,写服务脚本只需要按照标准格 式编写即可。
通过systemd命令集可以方便的对这些Unit进行管理。 systemd是Linux上系统守护进程管理工具,字母d(daemon)是守护进程的缩写,所以,systemd的意思就是 守护整个系统。systemd可以管理Linux系统中的所有资源,不同的资源统称为Unit,常见的unit有:
Systemd是内核启动后的第一个用户进程,PID为1,是所有其它用户进程的父进程。
扩展名:.service
service 文件存放路径:
Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录 /usr/lib/systemd/system/,真正的配置文件是(自动生成)存放在这个目录。
systemctl [command] [unit](配置的应用名称)
command可选项:
下面 /usr/lib/systemd/system/postfix.service 文件,它描述的是postfix服务的管理方式:
[Unit]
Description=Postfix Mail Transport Agent
After=syslog.target network.target
[Service]
Type=forking
PIDFile=/var/spool/postfix/pid/master.pid
EnvironmentFile=-/etc/sysconfig/network
ExecStartPre=-/usr/libexec/postfix/aliasesdb
ExecStartPre=-/usr/libexec/postfix/chroot-update
ExecStart=/usr/sbin/postfix start
ExecReload=/usr/sbin/postfix reload
ExecStop=/usr/sbin/postfix stop
[Install]
WantedBy=multi-user.target
整个文件分三个部分,[Unit]·[Service]·[lnstal]
(1)、[Unit]部分
Description:对本service的描述
Before/After:定义启动顺序,Before=xxx.service,代表本服务在xxx.service启动之前启动。After=xxox.service,代表本服务在 xxx之后启动。
(2)、[Service]部分
Type :service的种类,包含下列几种类型:
EnvironmentFile:环境配置文件
PIDFile:指向当前服务PID file的绝对路径
ExecStartPre:ExecStart执行前所调用的命令。
ExecStartPost:ExecStart执行后所调用的命令。
ExecStart:服务启动时执行的命令,此命令就是服务的主体。
ExecStop:定义停止当前服务时执行的命令。
注意:启动、重启、停止命令全部要求使用绝对路径
(3)、[Install]部分
WantedBy:在何种情况下,服务都可以被启用。
例如:WantedBy=multi-user.target(多用户环境下启用)
#1. 安装nginx编译环境
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
#2. 通用方式启动nginx
/usr/local/nginx/sbin/nginx #启动
/usr/local/nginx/sbin/nginx -s reload #重启
/usr/local/nginx/sbin/nginx -s quit #关闭nginx
#3. systemd 管理控制启动模式
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
#4. 参数详解
systemctl restart nginx
systemctl enable nginx
systemctl stop nginx
JDK 下载官网
#1. 下载Tomcat
wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.82/bin/apache-tomcat-8.5.82.tar.gz
#2. rpm直接安装jdk
rpm -ivh jdk-8u231-linux-x64.rpm
#3. 配置环境变量
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
#4. 检测环境
java -version
#5. 安装tomcat
tar -xf apache-tomcat-8.5.82.tar.gz
mv apache-tomcat-8.5.82 /usr/local/tomcat
#6. 启动tomcat
sh /usr/local/tomcat/bin/startup.sh #启动
sh /usr/local/tomcat/bin/shutdown.sh #关闭
#7. systemd管理控制启动
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
#8. systemd 管理
systemctl restart tomcat #启动
systemctl enable tomcat #配置自启
systemctl stop tomcat #停止服务
systemctl status tomcat #检测状态