通过sh实现定时发版

Linux crontab定时执行任务命令

cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。

cron服务操作命令
service crond start    #启动服务
service crond stop     #关闭服务
service crond restart  #重启服务
service crond reload   #重新载入配置
service crond status   #查看服务状态

crontab -l   #查看crontab
crontab -e   #编辑crontab
crontab -r   #删除crontab
			
crontab表达式说明:
*    *    *    *    *    [user]   [command]
-    -    -    -    - 
|    |    |    |    |
|    |    |    |    |
|    |    |    |    +----- 星期 (0 - 7) (Sunday=0 or 7)
|    |    |    +---------- 月 (1 - 12)
|    |    +--------------- 日 (1 - 31)
|    +-------------------- 时 (0 - 23)
+------------------------- 分 (0 - 59)

crontab命令实例 在线校验网站:https://www.iamwawa.cn/crontab.html
0 0 L * *        #每月的最后1天执行
* * * * *        #每1分钟执行一次
*/10 * * * *     #每隔10分钟执行一次
0 */1 * * *      #每隔1小时执行一次
30 21 * * *      #每晚的21:30执行
3,15 * * * *     #每小时的第3和第15分钟执行
3,15 8-11 * * *  #在上午8点到11点的第3和第15分钟执行

举例:定时执行脚本
30 9-17 * * MON-FRI
#定时发版**服务
30 9-17 * * MON-FRI  /app/restart.sh 0
发版脚本
#!/bin/bash
source /etc/profile

#脚本所在目录
SERVICE_DIR=$(cd $(dirname $0); pwd)
#代码所在目录
CODE_PATH=$SERVICE_DIR/code


echo "开始拉取最新代码  代码目录:$CODE_PATH"
cd $CODE_PATH
git checkout develop
git pull
sleep 1
echo "开始编译"
mvn clean install -Dmaven.test.skip=true

JAR_DIR_ARRAY=($(find . -name '*.jar'))

for ((i=0; i<${#JAR_DIR_ARRAY[@]};i++)); do
	echo  序号$i${JAR_DIR_ARRAY[i]}
done
jar_index="$1";
if [ ! -n "$jar_index" ]; then
	  read -p "请输入需要重启的jar 序号:" jar_index
	  echo "选择的下标为 $jar_index"
else
  	  echo "选择的下标为 $jar_index"
fi

JAR_DIR=${JAR_DIR_ARRAY[$jar_index]}
JAR_NAME=${JAR_DIR##*/}
SERVICE_NAME=${JAR_NAME%%.*}

echo "即将重启, $JAR_NAME"

echo "开始复制jar到 $SERVICE_DIR/ 目录"
cp -r $JAR_DIR $SERVICE_DIR/

cd $SERVICE_DIR
mkdir -p $SERVICE_DIR/../logs/$SERVICE_NAME
LOG_PATH=$SERVICE_DIR/../logs/$SERVICE_NAME/start.log

restart(){
        echo "------------------------ ${JAR_NAME} 开始启动 ------------------------"

        pid=`ps -ef | grep ${JAR_NAME} | grep -v grep | awk '{print $2}'`
        if [ -n "$pid" ]; then
                echo $pid Manager
                kill -9 $pid
                if [ "$?" -eq 0 ]; then
                        echo "kill success"
                else
                        echo "kill failed"
                fi
        fi
        nohup java -jar   -Xms1g -Xmx3g -XX:MaxMetaspaceSize=1g -XX:MetaspaceSize=512M -XX:+UseG1GC   ${JAR_NAME}   --spring.profiles.active=test   >> $LOG_PATH 2>&1 &
        sleep 3
        echo "------------------------ ${JAR_NAME} 开始完成 ------------------------"
        echo "------------------------ 查看日志请执行:tail -f $LOG_PATH ------------------------"
        # tail -f $LOG_PATH
}
restart

curl 'https://oapi.dingtalk.com/robot/send?access_token=1111111111 ' \
 -H 'Content-Type: application/json' \
 -d "{'msgtype':'markdown','markdown':{'title':'监控报警','text':'$SERVICE_NAME服务 发版成功啦'}}"


  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值