Linux 定时监测 Java 服务
实现 Linux 定时监测 Java 服务,若服务未启动则执行启动,核心是通过Shell 脚本检测进程,再用crontab 设置定时任务来自动执行脚本。
第一步:编写服务监测与重启脚本
先创建一个 Shell 脚本,用于检查指定 Java 服务进程是否存在,不存在则启动。
脚本示例(以服务名含my-java-service为例)
1.新建脚本文件,比如 monitor_java_service.sh
vim /usr/local/scripts/monitor_java_service.sh
2.写入以下内容(根据服务实际情况修改)
#!/bin/bash
# 1. 替换为你的Java服务标识(如进程名、jar包名,确保唯一)
SERVICE_NAME="my-java-service"
# 2. 替换为你的服务启动命令(如启动jar包、执行sh脚本)
START_COMMAND="nohup java -jar /usr/local/app/my-java-service.jar > /var/log/my-java-service.log 2>&1 &"
# 3. 替换为你的服务日志路径(用于记录监测和启动日志)
LOG_FILE="/var/log/monitor_java_service.log"# 记录当前时间到日志
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始监测Java服务: $SERVICE_NAME" >> $LOG_FILE# 检查进程是否存在(grep -v grep 排除自身查询进程)
PROCESS=$(ps aux | grep $SERVICE_NAME | grep -v grep)if [ -z "$PROCESS" ]; thenecho "[$(date '+%Y-%m-%d %H:%M:%S')] 服务未启动,正在启动..." >> $LOG_FILE# 执行启动命令$START_COMMAND# 再次检查是否启动成功sleep 3if [ -z "$(ps aux | grep $SERVICE_NAME | grep -v grep)" ]; thenecho "[$(date '+%Y-%m-%d %H:%M:%S')] 服务启动失败!" >> $LOG_FILEelseecho "[$(date '+%Y-%m-%d %H:%M:%S')] 服务启动成功!" >> $LOG_FILEfi
elseecho "[$(date '+%Y-%m-%d %H:%M:%S')] 服务正在运行,无需操作。" >> $LOG_FILE
fi
3.给脚本添加执行权限
chmod +x /usr/local/scripts/monitor_java_service.sh
4.测试脚本是否正常工作
/usr/local/scripts/monitor_java_service.sh
5.查看日志确认结果
cat /var/log/monitor_java_service.log
第二步:用 crontab 设置定时任务
通过 Linux 自带的crontab工具,让脚本按指定频率(如每分钟、每 5 分钟)自动执行。
操作步骤
1.编辑当前用户的 crontab 任务(若需 root 权限,先执行su root)
crontab -e
2.在文件末尾添加定时规则(以每 30分钟执行一次为例)
# 格式:分 时 日 月 周 脚本路径(日志会追加到脚本指定的LOG_FILE中)
*/1 * * * * /usr/local/scripts/monitor_java_service.sh
- 定时规则说明:
*/1 * * * *:每 1 分钟执行一次(常用: */5 * * * *每 5 分钟,0 * * * *每小时)
可通过crontab 表达式在线生成工具自定义频率
3.保存并退出(vim 中按Esc,输入:wq回车)
4.重启 crontab 服务(确保任务生效,不同系统命令略有差异)
- CentOS/RHEL:systemctl restart crond
- Ubuntu/Debian:systemctl restart cron
5.查看 crontab 状态(确认服务正常运行)
systemctl status crond # CentOS/RHEL
# 或
systemctl status cron # Ubuntu/Debian
