使用systemctl管理服务流程
1. 编译安装java环境
oracle jdk 版本8u361: https://www.123pan.com/s/liX0Vv-C3Pa.html
tomcat版本 9.0.76
# 解压
tar zxvf jdk-8u361-linux-x64.tar.gz
# 创建软链接,方便以后更新jdk
[root@bz02 app]# ln -s /app/lib/jdk1.8.0_361/ /app/tools/jdk
# 添加jdk环境变量(二进制安装才需要,yum安装不需要)
[root@bz02 ~]# tail -4 /etc/profile
export JAVA_HOME=/app/tools/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
# 测试
重新加载 `/etc/profile`
[root@bz02 ~]# source /etc/profile
[root@bz02 ~]# java -version
java version "1.8.0_361"
Java(TM) SE Runtime Environment (build 1.8.0_361-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.361-b09, mixed mode)
2.yum安装JDK
# 直接yum安装即可
# 查找yum库中的openjdk
[root@bz03 ~]# yum search openjdk
java-1.8.0-openjdk.i686 : OpenJDK Runtime Environment 8
java-1.8.0-openjdk.x86_64 : OpenJDK 8 Runtime Environment
java-1.8.0-openjdk-accessibility.i686 : OpenJDK accessibility connector
java-1.8.0-openjdk-accessibility.x86_64 : OpenJDK accessibility connector
java-1.8.0-openjdk-demo.i686 : OpenJDK Demos 8
java-1.8.0-openjdk-demo.x86_64 : OpenJDK 8 Demos
java-1.8.0-openjdk-devel.i686 : OpenJDK Development Environment 8
java-1.8.0-openjdk-devel.x86_64 : OpenJDK 8 Development Environment
java-1.8.0-openjdk-headless.i686 : OpenJDK Headless Runtime Environment 8
java-1.8.0-openjdk-headless.x86_64 : OpenJDK 8 Headless Runtime Environment
java-1.8.0-openjdk-javadoc.noarch : OpenJDK 8 API documentation
java-1.8.0-openjdk-javadoc-zip.noarch : OpenJDK 8 API documentation compressed in a single archive
java-1.8.0-openjdk-src.i686 : OpenJDK Source Bundle 8
java-1.8.0-openjdk-src.x86_64 : OpenJDK 8 Source Bundle
java-11-openjdk.i686 : OpenJDK Runtime Environment 11
java-11-openjdk.x86_64 : OpenJDK 11 Runtime Environment
安装
[root@bz03 ~]# yum install -y java-1.8.0-openjdk*
# 测试
[root@bz03 ~]# java -version
openjdk version "1.8.0_372"
OpenJDK Runtime Environment (build 1.8.0_372-b07)
OpenJDK 64-Bit Server VM (build 25.372-b07, mixed mode)
3. systemctl 管理服务流程
systemctl 是通过放在
/usr/lib/systemd/system/xxx.service
文件进行管理对应服务的
a. 查看service文件书写格式
- Unit:书写注释,说明文件的作用。服务的依赖
- Service:核心部分,开关重启的命令
- Install:运行级别
# sshd
root@bz02 system]# systemctl cat sshd
# /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
DDescriptionocumentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
- Unit
-
Description
: 当前服务描述 -
DDescriptionocumentation
: man帮助 -
After
:核心,依赖的服务,按顺序启动 -
Wants
: 弱依赖关系,就算启动失败,也会继续往下执行
-
- Service
-
Type
:指定服务启动类型,一般选择notify
、forking
、oneshot
之一,不设置则默认为simple
-
EnvironmentFile
:指定环境变量文件 -
ExecStart
: 启动命令 -
ExecStop
: 停止命令 -
ExecReload
: 重启命令 -
KillMode
: 停止命令,和ExecStop
作用一致,选择其一 -
Restart
: 自动重启 -
RestartSec
: 间隔多少秒后自动重启
-
- Install
-
WantedBy
: 运行级别,一般设置为multi-user.target
-
[root@bz04 ~]# systemctl cat nginx
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
KillSignal=SIGQUIT
TimeoutStopSec=5
PrivateTmp=true
nginx配置文件与sshd不同,不同地方进行解释(相同选项已删除)
主要不同的地方为Service
type=forking
PIDFile
: pid文件目录-
Pre
: 执行开关机重启之前执行的命令-
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
: 删除pid文件 -
ExecStartPre=/usr/sbin/nginx -t
:检查配置文件语法是否正确
-
b. tomcat的systemctl配置
a. 配置java环境变量(yum安装的jdk则不需要)
[root@bz02 tomcat]# vim /etc/sysconfig/tomcat
[root@bz02 tomcat]# cat /etc/sysconfig/tomcat
JAVA_HOME=/app/tools/jdk
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
b. systemctl配置
[root@bz04 ~]# vim /usr/lib/systemd/system/tomcat.service
#/usr/lib/systemd/system/tomcat.service
[Unit]
Description=The tomcat web server by server
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/app/tools/tomcat/bin/startup.sh
ExecStop=/app/tools/tomcat/bin/shutdown.sh
ExecReload=/app/tools/tomcat/bin/startup.sh && sleep 5 && /app/tools/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
# 通知systemctl,配置文件发生了变化,需要重载
[root@bz02 system]# systemctl daemon-reload
4. 测试
🏮警告: tomcat有两种启动方式,但是开关机重启只能选择一种,不能混用,比如使用systemctl启动后,不能使用绝对路径 shutdown.sh
关闭
# 查看tomcat进程和端口是否启动或者占用
[root@bz02 system]# ss -lntup | grep 8080
[root@bz02 system]# ps -aux|grep java
root 5064 0.0 0.0 112808 964 pts/1 R+ 15:43 0:00 grep --color=auto java
# 启动
[root@bz02 system]# systemctl start tomcat
# 查看状态
[root@bz02 system]# systemctl status tomcat.service
● tomcat.service - The tomcat web server by server
Loaded: loaded (/usr/lib/systemd/system/tomcat.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2023-07-05 15:50:54 CST; 3s ago
# 查看端口
[root@bz02 system]# ss -lntup |grep 8080
tcp LISTEN 0 100 [::]:8080 [::]:* users:(("java",pid=5459,fd=57))
# 查看进程
[root@bz02 system]# ps -aux|grep java
root 5459 16.0 8.7 2278156 86760 ? Sl 15:50 0:03 /app/tools/jdk/bin/java -Djava.util.logging.config.file=/app/tools/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /app/tools/tomcat/bin/bootstrap.jar:/app/tools/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/app/tools/tomcat -Dcatalina.home=/app/tools/tomcat -Djava.io.tmpdir=/app/tools/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 5505 0.0 0.0 112808 964 pts/1 R+ 15:51 0:00 grep --color=auto java
# 自启动
[root@bz02 system]# systemctl enable tomcat
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /usr/lib/systemd/system/tomcat.service.
图片.png