linux环境定时重启服务的流程分享
linux环境定时重启服务是很常见需求
一、定时重启jar包
linux环境我有一个springBoot 框架的 java服务,包名称是demo.jar,端口号是暂定8081。每天凌晨1点重启一下这个服务。
1、创建脚本文件
sudo nano /opt/scripts/demo_restart.sh
2、脚本内容
#!/bin/bash
# ==========================================
# 服务信息配置
# ==========================================
SERVICE_NAME="demo-service" # 服务名称(用于日志标识)
JAR_PATH="/usr/local/nandao/server/demo-service.jar" # 服务JAR包绝对路径
PORT=8081 # 服务端口号
LOG_FILE="/usr/local/nandao/server/${SERVICE_NAME}_restart.log" # 操作日志路径
# ==========================================
# 功能函数:检查端口是否已被占用
# ==========================================
is_port_active() {
netstat -tuln | grep -q ":$PORT "
return $?
}
# ==========================================
# 记录操作日志
# ==========================================
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
# ==========================================
# 主流程
# ==========================================
log "========== 开始重启服务 ${SERVICE_NAME} =========="
# 阶段1:停止旧服务
log "正在停止服务..."
PID=$(lsof -ti :$PORT)
if [ -n "$PID" ]; then
kill $PID
sleep 10 # 等待正常终止
# 检查是否终止成功
if ps -p $PID > /dev/null; then
log "检测到进程残留,强制终止 PID: $PID"
kill -9 $PID
fi
else
log "未找到运行中的服务进程"
fi
# 阶段2:启动新服务
log "正在启动服务..."
nohup java -Dserver.port=8081 -jar $JAR_PATH >> /usr/local/nandao/server/logs/demo.log 2>&1 &
# 阶段3:验证启动状态
sleep 30 # 等待服务初始化
if is_port_active; then
log "服务启动成功"
else
log "服务启动失败!请检查日志 /usr/local/nandao/server/logs/demo.log"
fi
log "========== 操作完成 ==========\n"
3、授权脚本
sudo chmod +x /opt/scripts/demo_restart.sh
4、配置定时任务
# 编辑root用户的crontab(推荐使用root权限)
sudo crontab -e
#最后行添加内容
0 1 * * * /opt/scripts/demo_restart.sh
#查看定时任务列表
sudo crontab -l
5、手动测试
# 执行重启脚本
sudo /opt/scripts/demo_restart.sh
# 查看实时日志
tail -f /var/log/demo_restart.log
6、检查状态
# 查看端口占用
ss -tuln | grep 8081
# 查看服务进程
ps aux | grep "java -jar /opt/app/demo.jar"
# 查看应用日志
tail -f /opt/app/logs/demo.log
7、报错解决
./demo_restart.sh
-bash: ./demo_restart.sh: /bin/bash^M: bad interpreter: No such file or directory
原因:错误信息中的 ^M
字符表明脚本文件包含 Windows 换行符(CRLF),而 Linux 系统要求使用 Unix 换行符(LF)
清除方式:
# 方法1:安装并使用 dos2unix 工具
sudo apt install dos2unix -y # Debian/Ubuntu
sudo yum install dos2unix -y # CentOS/RHEL
dos2unix waster_service_restart.sh
# 方法2:使用 sed 命令直接替换
sed -i 's/\r$//' waster_service_restart.sh
# 方法3:用 vim 手动修正
vim waster_service_restart.sh
# 进入 vim 后输入:
:set ff=unix
:wq
验证:
# 查看换行符是否已修正
cat -v demo_restart.sh | head -n1
# 正确输出应显示 `#!/bin/bash` 而不是 `#!/bin/bash^M`
到此,定时重启jar包分享完成。
二、