linux服务器更新jar包脚本
【需求】Java每次发布新的版本都需要先kill掉原来的服务,然后再启动新的包 有了这个脚本只需要把包替换掉,服务会自动kill
以8184 为例 完整的脚本如下
#!/bin/bash
# 检查端口 8184 是否被占用
PORT=8184
PID=$(lsof -t -i:$PORT)
if [ -n "$PID" ]; then
# 如果端口被占用,杀死占用该端口的进程
echo "Port $PORT is occupied by PID $PID. Killing the process."
kill -9 $PID
else
# 如果端口没有被占用
echo "Port $PORT is not occupied. Proceeding with starting the Java service."
fi
# 执行 Java 服务
echo "Starting Java service with profile 'product'..."
java -jar admin.jar --spring.profiles.active=product &
echo "Java service started."
解释:
lsof -t -i:$PORT
:使用lsof
命令检查端口 8184 是否被占用。如果被占用,lsof
会返回该进程的 PID。if [ -n "$PID" ]
:检查PID
变量是否为空。如果PID
不为空,说明端口被占用。kill -9 $PID
:强制终止占用该端口的进程。java -jar admin.jar --spring.profiles.active=product &
:使用java -jar
来后台启动 Java 服务,这样即使退出终端,服务也能继续运行。echo
:用于打印日志,帮助你跟踪脚本执行状态。使用说明:
- 保存脚本为一个
.sh
文件(例如start_service.sh
)。- 给予执行权限:
chmod +x start_service.sh
。- 执行脚本:
./start_service.sh
。这个脚本会首先检查端口 8184 是否被占用,如果占用则终止进程,并重新启动 Java 服务。如果端口没有被占用,则直接启动服务。