目录
在不同的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
- #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 #检测状态