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服务 发版成功啦'}}"