要为 Java 的 Spring Boot 微服务编写一个自动重启的脚本并配置 Linux 的 crontab 以每 10 分钟检测一次,可以使用以下步骤:
1.创建一个脚本文件,例如 restart.sh,并将以下内容添加到该文件中:
#filePath /data/webapps/sh/restart.sh
#!/bin/sh
#check service and restart if down
DATE=`date -d "today" +"%Y-%m-%d-%H:%M"`
MIN=`date -d "today" +"%M"`
#------- config -------
#service path
servicePath=/data/webapps/mall
#service name
serviceName=your-microservice
extension=.jar
#service restart log path
restartLogPath=/data/webapps/logs
#------- restart -------
cd ${servicePath}
#get service pid
servicePid=`ps -ef | grep ${serviceName}${extension} |grep -v grep| awk '{print $2}'`
#if语句判断服务是否存在,如果不存在,输出日志记录并重启服务
if [ "$servicePid" != "" ]; then
echo "$DATE The ${serviceName}${extension} is OK, 进程ID = ${servicePid}" >> ${restartLogPath}/${serviceName}_restart.log
else
echo "$DATE The ${serviceName}${extension} is problem and restart,重启分钟数 = ${MIN}" >> ${restartLogPath}/${serviceName}_restart.log
#backup service log
mv ./log_${serviceName}.log ./log_${serviceName}_${DATE}.log
#startup service
nohup java -Xms512m -Xmx512m -jar ${serviceName}${extension} > ./log_${serviceName}.log 2>&1 &
fi
请将 servicePath、 serviceName、restartLogPath等配置替换为你微服务的实际环境配置
2.为脚本文件添加可执行权限:
chmod +x restart.sh
3.使用 crontab 命令配置定时任务,每 10 分钟执行一次脚本:
crontab -e
在打开的编辑器中添加以下行:
*/10 * * * * /bin/sh /data/webapps/sh/restart.sh
请将 /data/webapps/sh/ 替换为脚本文件的实际路径
保存并关闭编辑器。
这样,每 10 分钟 crontab 将会执行 restart.sh 脚本,检查微服务是否正在运行,并在需要时重新启动它。
查看已配置的定时任务
crontab -l
4.可以使用service crond status命令来查看crontab的服务状态
Redirecting to /bin/systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2023-09-15 14:47:11 CST; 3 months 11 days ago
Main PID: 949 (crond)
Tasks: 1
Memory: 2.8M
CGroup: /system.slice/crond.service
└─949 /usr/sbin/crond -n