Linux 下使用 crontab 自动断电重启 java 程序
方式一、单 restart.sh 脚本
bash
#!/bin/sh
APP_HOME=/app
APP_NAME=sample-quickboot-mybatis-plus-1.0.46-SNAPSHOT.jar
JVM_OPTS="-Dname=$APP_NAME -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m"
procnum=`ps -ef|grep $APP_NAME|grep -v grep|wc -l`
if [ $procnum -eq 0 ]
then
cd $APP_HOME
source /etc/profile
mkdir -p logs
echo `date +%Y-%m-%d` `date +%H:%M:%S` "restart $APP_NAME" >>$APP_HOME/logs/restart.log
nohup java $JVM_OPTS -jar $APP_NAME > /dev/null 2>&1 &
fi
添加执行权限
bash
chmod +x restart.sh
将 restart.sh 脚本加入 crontab
bash
#进入crontab
crontab -e
#填写一下内容(中间的 /bin/bash 可以改为 /bin/sh,也可以直接省略掉。)
#开机自启动任务(未验证)
# @reboot /bin/bash /app/restart.sh
#每5分钟执行一次
*/5 * * * * /bin/bash /app/restart.sh
#每分钟执行一次
# * * * * * /bin/sh /app/restart.sh
# 查看 cron 执行日志
tail -f /var/log/cron
bash
# crontab 语法
more /etc/crontab
* * * * * command(s)
^ ^ ^ ^ ^
| | | | | allowed values
| | | | | -------
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)
方式二、monitor.sh 调用 quickboot.sh
注意:脚本中 “source /etc/profile” 是因为 crontab 执行脚本无法取到环境变量,导致进程启动不起来,所以这个必须加上。
quickboot.sh 和 monitor.sh 以及应用 jar 存放于 /app 目录下
假如启动 java 的脚本为 quickboot.sh
bash
#!/bin/sh
APP_HOME=/app
APP_NAME=sample-quickboot-mybatis-plus-1.0.46-SNAPSHOT.jar
JVM_OPTS="-Dname=$APP_NAME -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m"
cd $APP_HOME
source /etc/profile
kill -9 `ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
nohup java $JVM_OPTS -jar $APP_NAME > /dev/null 2>&1 &
echo "Start $APP_NAME success..."
监控 shell 脚本:monitor.sh
bash
#!/bin/sh
APP_HOME=/app
APP_NAME=sample-quickboot-mybatis-plus-1.0.46-SNAPSHOT.jar
procnum=`ps -ef|grep $APP_NAME|grep -v grep|wc -l`
if [ $procnum -eq 0 ]
then
cd $APP_HOME
source /etc/profile
mkdir -p logs
echo `date +%Y-%m-%d` `date +%H:%M:%S` "restart $APP_NAME" >>$APP_HOME/logs/restart.log
# 如果启动脚本有参数,同理,此处加上即可
./quickboot.sh
fi
添加执行权限(多个)
bash
chmod +x quickboot.sh monitor.sh
将 monitor.sh 脚本加入 crontab
bash
crontab -e
*/5 * * * * /bin/bash /app/monitor.sh