Linu部署服务启停脚本

Linux项目部署启停

WEB应用(WAR包)部署

实际开发中,难免遇见新业务项目构建、项目重构(重新优化整个项目的架构,相当于重写),也可能是项目拆分多个模块,也可能部分拆分,但项目的模块化分离,就存在新建项目,新开服务端的可能,在Linux部署中,我们通常遇见需要搭建一个新的服务:

WEB应用(war包):

  1. 在Linux服务目录中,安装适配的Tomcat应用。
  2. 修改Tomcat相关配置,如下:
    • Tomcat应用本身所占用的端口更新,为什么改?因为服务中可能存在多个部署应用,就可能存在多个Tomcat服务,多服务应用端口相同会冲突(如果你没有此需求,可不用改)
    • 本次部署WEB应用,所使用的端口更新,为什么改?因为Tomcat部署加载的服务端口是由Tomcat应用指定配置的,默认此服务启动后访问的端口是8080(如果你不担心冲突或被恶意使用,可不用改)
    • 本次部署WEB应用,可支持的远程跟踪端口,为什么改?因为应用有后端服务代码,在日志信息不全面的情况下,可暂时弃用远程Debug方式排查业务问题(如果你的日志信息非常全面,不需要远程查问题,可不用改)
  3. Tomcat目录下bin包中,给启停服务脚本授权允许执行,若有其他授权可自行根据需求添加
  4. 将war包放入到Tomcat安装目录下(webapps/...)部署,启动服务

Tomcat的暂时先不写了,后面有时间再说,此处临时记录。上面的基本够用了

JAR应用(JAR包)部署

Java应(jar包):

常见jarbao为boot应用,无需手动配置Tomcat,当然,如果你没有使用Boot的Tomcat,可以手动配置安装Tomcat(略)

1.LInux应用目录下,新建服务包

2.新建文件后缀为 .sh 下,命名个人习惯(如restart.shstop.shrestart.sh - 用于重启服务,stop.sh - 用于停止服务

3.编辑文件,示例代码如下,可根据个人情况修改:

服务重新启动脚本(restart.sh

以下是重启服务脚本,stop的,自行根据下面的改编吧

复制代码
 1 #!/bin/bash
 2 
 3 # 定义服务名称、日志文件路径、jar文件路径和JDK路径、服务JVM相关参数(启动Boot远程端口服务,端口设置为:9099)、其他命令行  
 4 #######把他理解为变量定义,名字这些都是自己定,无特定限制,数据值改为你自己的即可,定义好的变量通过 ${名字} 来使用 #######
 5 SERVICE_NAME="AutoTask"
 6 LOG_FILE="/opt/boot/AutoTask/autoTask.log"
 7 JAR_FILE="/opt/boot/AutoTask/autoTask-0.0.1-SNAPSHOT.jar"
 8 JDK_HOME="/home/java/jdk1.8.0_112/"
 9 JAVA_OPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9099" # 示例JVM参数
10 LOG_VIEWER="tail -f" # 用于查看日志的命令
11 
12 
13 # 定义一个:启动服务的函数(只有被调用才执行)
14 start_service() {
15     echo "$(date): 正在启动 $SERVICE_NAME 服务..."
16     nohup ${JDK_HOME}/bin/java "$JAVA_OPTIONS" -jar "$JAR_FILE" --spring.profiles.active=test --server.port=5090 >> "$LOG_FILE" 2>&1 &
17     echo "$(date): $SERVICE_NAME 服务启动成功"
18 }
19 
20 # 定义进程pid  变量
21 pid=""
22 # 定义查询服务进程PID的方法 (只有被调用才执行)
23 query(){
24     # 查询并赋值 (这里指定了管道查询,获取服务进程的)
25     pid=`ps uxf | grep ${JAR_FILE} | grep -v grep | awk '{print $2}'`
26 }
27 
28 # 停止服务的函数(只有被调用才执行)
29 stop_service() {
30     echo "$(date): 正在停止 $SERVICE_NAME 服务..."
31     # 执行一次查询PID,实现赋值
32     query
33     #检查PID是否为空
34     if [ x"${pid}" != x"" ];  then
35         # 停止服务,并提示服务正在停止中....
36         kill -9 ${pid}
37         echo "${JAR_FILE} (pid : ${pid}) exiting......"
38         # 利用while循环特性(校验pid不为空,执行查询)
39         while [ x"${pid}" != x"" ]
40             do
41             # 间隔5秒再次执行查询,确认是否停止
42             sleep 3
43             query
44             echo "$Please wait a moment......$(date): 等待 $SERVICE_NAME 服务停止..."
45         done
46             # 当程序走到这,说明上面查询已经是空了,可以输出停止完毕了
47             echo "$(date) : is OK , $SERVICE_NAME exited.服务停止成功"
48     else
49         echo "HI , ${JAR_FILE} already stopped."
50     fi
51 }
52 
53 # 检查服务是否正在运行的函数
54 is_service_running() {
55     pgrep -f "$JAR_FILE"
56     return $? # 0表示运行,非0表示未运行
57 }
58 
59 # 根据服务状态执行相应操作(执行如果服务没有停止,那么执行stop_service停止服务)
60 if is_service_running;  then
61     stop_service
62 fi
63 
64 #执行启动服务
65 start_service
66 
67 
68 # 检查日志文件并尝试打开
69 if [ -f "$LOG_FILE" ]; then
70     echo "服务已启动,正在打开日志文件 $LOG_FILE 查看最新日志..."
71     # 如果您想要在后台运行 tail -f 并让脚本继续执行其他任务,取消下面的注释
72     # $LOG_VIEWER "$LOG_FILE" &
73     # 如果您想要脚本停留在 tail -f 上,则保持当前状态
74     $LOG_VIEWER "$LOG_FILE"
75 else
76     echo "日志文件 $LOG_FILE 不存在,请确保日志文件路径正确且服务已开始写入日志。"
77 fi
相关推荐
wdxylb1 小时前
云原生俱乐部-shell知识点归纳(1)
linux·云原生
飞雪20073 小时前
Alibaba Cloud Linux 3 在 Apple M 芯片 Mac 的 VMware Fusion 上部署的完整密码重置教程(二)
linux·macos·阿里云·vmware·虚拟机·aliyun·alibaba cloud
路溪非溪3 小时前
关于Linux内核中头文件问题相关总结
linux
Lovyk5 小时前
Linux 正则表达式
linux·运维
Fireworkitte6 小时前
Ubuntu、CentOS、AlmaLinux 9.5的 rc.local实现 开机启动
linux·ubuntu·centos
sword devil9007 小时前
ubuntu常见问题汇总
linux·ubuntu
ac.char7 小时前
在CentOS系统中查询已删除但仍占用磁盘空间的文件
linux·运维·centos
淮北也生橘128 小时前
Linux的ALSA音频框架学习笔记
linux·笔记·学习
华强笔记12 小时前
Linux内存管理系统性总结
linux·运维·网络
十五年专注C++开发12 小时前
CMake进阶: CMake Modules---简化CMake配置的利器
linux·c++·windows·cmake·自动化构建