主题
Crontab 定时重启服务
启动脚本
shell
./service.sh start
关闭脚本
shell
./service.sh stop
重启脚本
shell
./service.sh restart
脚本下载
service.sh
bash
#!/bin/bash
# 只需要更具实际情况修改 APP_HOME APP_NAME 就行了
#java服务包路径
APP_HOME=/root/demo
#java服务包名称
APP_NAME=demo-0.0.1-SNAPSHOT.jar
APP_ALL_NAME=$APP_HOME/$APP_NAME
#JVM参数
JVM_OPTS="-Dname=$APP_NAME -XX:+UseG1GC -Xms16g -Xmx16g -Dspring.profiles.active=port "
#是否打印日志
IS_LOG=True
#日志路径
LOG_PATH=$APP_HOME/logs
#日志名称
LOG_NAME=$APP_NAME.log
LOG_ALL_NAME=$APP_HOME/$LOG_NAME
mkdir -p $LOG_PATH
PID=""
if [ "$1" = "" ];
then
echo -e "\033[0;31m 未输入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m"
exit 1
fi
if [ "$APP_ALL_NAME" = "" ];
then
echo -e "\033[0;31m 未输入应用名 \033[0m"
exit 1
fi
function start()
{
PID=`ps -ef |grep java|grep $APP_ALL_NAME|grep -v grep|awk '{print $2}'`
if [ x"$PID" != x"" ]; then
echo -e "\033[42;5m Runing \033[0m $APP_ALL_NAME (pid:$PID) 服务正在运行中..."
else
echo -e "\033[43;5m Starting \033[0m $APP_ALL_NAME 服务正在启动中..."
if [ "$IS_LOG" = "True" ]; then
nohup java -jar $JVM_OPTS $APP_ALL_NAME 1>$LOG_ALL_NAME 2>$LOG_ALL_NAME &
query
echo -e "\033[43m Start \033[0m $APP_ALL_NAME (pid:$PID) 服务启动成功...(日志路径$LOG_ALL_NAME)"
else
nohup java -jar $JVM_OPTS $APP_ALL_NAME > /dev/null 2>&1 &
query
echo -e "\033[43m Start \033[0m $APP_ALL_NAME (pid:$PID) 服务启动成功..."
fi
fi
}
function stop()
{
query
if [ x"$PID" != x"" ]; then
kill -TERM $PID
echo -e "\033[41;5m Stoping \033[0m $APP_ALL_NAME (pid:$PID) 服务正在停止中..."
while [ x"$PID" != x"" ]
do
sleep 1
query
done
echo -e "\033[41m Stop \033[0m $APP_ALL_NAME 服务已停止..."
else
echo -e "\033[41m Stop \033[0m $APP_ALL_NAME 服务已停止..."
fi
}
function restart()
{
stop
sleep 2
start
}
function status()
{
PID=`ps -ef |grep java|grep $APP_ALL_NAME|grep -v grep|wc -l`
if [ $PID != 0 ];then
echo -e "\033[42;5m Runing \033[0m $APP_ALL_NAME 服务正在运行中..."
else
echo -e "\033[41m Stop \033[0m $APP_ALL_NAME 服务已停止..."
fi
}
function query(){
PID=`ps -ef |grep java|grep $APP_ALL_NAME|grep -v grep|awk '{print $2}'`
}
case $1 in
start)
start;;
stop)
stop;;
restart)
restart;;
status)
status;;
*)
esac
health-check.sh
base
#!/bin/bash
# 声明接口地址,服务端口号
HEALTH_URL=http://127.0.0.1:8080
SERVICE_SH=/root/demo/service.sh
# 添加服务状态检查方法
checkHealth(){
result=$(curl --connect-timeout 1 -m 1 -s ${HEALTH_URL} | grep OK)
if [ "$result" != "" ]; then
return "1"
else
return "0"
fi
}
checkHealth
# 结果判断打印
if [ $? -eq "1" ];then
echo "服务正在运行中..."
else
echo "服务已停止运行..."
$SERVICE_SH start
fi
TIP
脚本里根据不同的项目设置里面 APP_HOME
、APP_NAME
、JVM_OPTS
这三个值。
crontab相关命令
以下命令已在 Ubuntu 22.04 实测无任何问题,其他系统自测
查看当前用户的定时任务列表
shell
crontab -l
编辑当前用户的定时任务列表
shell
crontab -e
# 每分钟执行脚本
* * * * * /path/to/script.sh
# 每周星期一凌晨一点执行脚本
0 1 * * 1 /path/to/script.sh
# 每周六凌晨一点执行脚本
0 1 * * 6 /path/to/script.sh
# 每周日凌晨一点执行脚本
0 1 * * 7 /path/to/script.sh
# 每月一日凌晨一点执行脚本
0 1 1 * * /path/to/script.sh
# 每月二十八日凌晨一点执行脚本
0 1 28 * * /path/to/script.sh
# 每年一月凌晨一点执行脚本
0 1 1 1 * /path/to/script.sh
# 每年十二月凌晨一点执行脚本
0 1 12 1 * /path/to/script.sh
# 每年一月, 三月, 五月, 七月, 九月, 和 十一月份凌晨一点执行脚本
0 1 1 1,3,5,7,9,11 * /path/to/script.sh
# 如果需要输出脚本执行的内容建议在测试脚本时候开启入输出内容正常关闭即可
* * * * * /path/to/script.sh > /var/log/cron.log 2>&1
删除当前用户的定时任务列表
shell
crontab -r
服务状态
shell
systemctl status cron
服务启动
shell
systemctl start cron
服务关闭
shell
systemctl stop cron