jenkins--构建传输jar包后启动java服务
jenkins--构建传输jar包后启动java服务
目标:针对单体java服务
前置条件:jdk1.8 日志切割cronolog
创建server.sh脚本文件
#! /bin/bash
JAR_PATH="/data/forwarder" # 文件目录
JAR_FILE="ruoyi-admin.jar" # 文件名
LOG_PATH="/data/forwarder/logs" #cronolog 日志切割路径
LOG_FILE="$LOG_PATH/console-%Y-%m-%d.out" #cronolog 日志切割生成文件
# 停止 Java 服务
echo "Stopping Java service..."
PID=$(ps -ef | grep $JAR_FILE | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
kill $PID
fi
sleep 5
# 启动 Java 服务
echo "Starting Java service..."
source /etc/profile #jenkins默认是用非登录模式来执行shell命令,所有没有加载环境变量配置文件。
nohup java -jar $JAR_PATH/$JAR_FILE 2>&1 | cronolog $LOG_FILE >> /dev/null 2>&1 &
#/dev/null 中,这是一个特殊的文件,它会将所有数据直接丢弃。
停止java服务
输出 "Stopping Java service..." 字符串。
使用 ps -ef 命令列出当前系统上所有进程的详细信息。
使用 grep 命令过滤出包含 $JAR_FILE 字符串的进程。
使用 grep -v grep 命令将过滤出来的进程中排除包含 "grep" 字符串的进程(即过滤掉 grep $JAR_FILE 这条命令本身)。
使用 awk '{print $2}' 命令提取非grep进程的 PID。
如果 PID 存在,则使用 kill 命令杀死该进程。
为了确保进程已经停止,等待 5 秒钟。
2>&1、>>、最后一个& 的作用
2>&1 是将标准错误输出(stderr)重定向到标准输出(stdout),也就是说,它将标准错误输出的内容和标准输出合并为一个流,一起输出到管道中或者输出到文件。
>> 是将输出重定向到指定文件的末尾,并在不覆盖已有内容的情况下将输出内容追加到该文件中。
最后一个 & 表示将进程放到后台执行,在命令行中使用 & 可以让该命令在后台运行,控制台可以继续输入其他命令,而不必等待该命令执行完成。如果该命令是一个长时间运行的进程并且需要在后台持续运行,则需要使用 nohup 命令来使进程在退出 shell 后仍然运行。
jenkins调用脚本
文件全路径 sh /data/forwarder/ruoyi-admin.jar
cronolog 查看
进入日志目录/data/forwarder/logs
tail -f -n 500 console-2023-05-25.out #实时查看日志文件最近500条记录