1. 前言
crond是linux系统中用来定期执行命令或者指定程序任务的一种服务或者软件。
用rpm -qa | grep crontab查看是否安装,如果没有安装就执行 yum install -y crontabs,Centos6/7系统默认存在。
常用命令(具体命令参考这一篇文章):
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
/sbin/service crond status //任务状态
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron定时任务列表
crontab -r //删除某个用户的cron服务(谨慎使用)
crontab -e //编辑某个用户的cron定时任务
2. crond格式说明
基本格式 :
* * * * * command
分 时 日 月 周 命令
第1列表示分钟00~59 每分钟用*或者 */1表示
第2列表示小时00~23(0表示0点)
第3列表示日期01~31
第4列表示月份01~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
样例:
*/1 * * * * 表示每分钟重启
0 2 * * 1 表示每星期一的凌晨2:00重启
30 21 * * * 表示每晚的21:30重启
30 21 1,10,22 * * 表示每月1、10、22日的21:30重启
10 1 * * 6,0 表示每周六、周日的1:10重启
0,30 18-23 * * * 表示在每天18:00至23:00之间每隔30分钟重启
0 2 * * 6 表示每星期六的凌晨2:00重启
* */1 * * * 表示每一小时重启
* 23-7/1 * * * 表示晚上11点到早上7点之间,每隔一小时重启
0 11 4 * mon-wed 表示每月的4号与每周一到周三的11点重启
0 4 1 jan * 表示一月一号的4点重启
3. 使用
功能:使用crond每天备份consul数据,为异常情况使用。
定时任务启动脚本task.sh
#!/bin/bash
# root用户
currentUser=$(whoami)
if [ "$currentUser" != "root" ];then
echo "当前用户为非root,请切换root用户:${currentUser}"
exit 1
fi
function startTimeTask(){
source /etc/profile
source /root/.bash_profile
touch /var/spool/cron/root
echo "**设置定时任务开始, 定时时间:每天 * * */1 * *"
crontab -l > conf && echo "* * */1 * * ${currentpath}/backup.sh >> ${currentpath}/backup.log 2>&1 &" > /var/spool/cron/root
if [ $? -eq 0 ]
then
echo "**设置定时任务成功"
else
echo -e "\033[31m**设置定时任务失败\033[0m"
fi
#启动服务,为防止crond已开启,选择重启服务
/sbin/service crond restart
if [ $? -eq 0 ]
then
pid=`ps gaux | grep "crond" | grep -v grep |head -n 1| awk '{print $2}'`
echo "**启动定时任务成功,pid=${pid}"
else
echo -e "\033[31m**启动定时任务失败\033[0m"
fi
}
#错误输出高亮格式
#echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"
#echo -e "\033[31m 红色字 \033[0m"
echo "****************************"
echo "*** 启动定时任务开始 ****"
echo "****************************"
#获取当前目录
currentpath=$(pwd)
echo "----------------------------"
startTimeTask
echo "----------------------------"
echo "****************************"
echo "*** 启动定时任务完成 ****"
echo "****************************"
任务脚本backup.sh:
#!/bin/bash
currentUser=$(whoami)
if [ "$currentUser" != "root" ];then
echo "当前用户为非root:${currentUser}"
exit 1
fi
#访问到执行目录
cd "/opt/consul"
#获取当前目录
currentpath=$(pwd)
#判断命令是否执行成功
function isExit()
{
res=`echo $?`
if [ $res = "1" ]; then
echo -e "\033[31m执行脚本命令失败,退出! \033[0m"
exit 1
fi
}
# 备份Consul
function BackupConsul()
{
Date=$(date +%Y%m%d-%H:%M) #测试
#Date=$(date +%Y%m%d-%H:%M)
echo "*备份生成文件名consul_kv_dnps_${Date}.json"
./consul kv export --http-addr=http://127.0.0.1:8500 -token=b3a9bca3-6e8e-9678-ea35-ccb8fb272d42 '' > consul_kv_dnps_${Date}.json
}
echo "****************************"
echo "***定时启动备份Consul开始***"
echo "****************************"
echo "----------------------------"
echo "*当前目录:${currentpath}"
BackupConsul
isExit
echo "*备份Consul数据成功"
echo "----------------------------"
echo "****************************"
echo "***定时启动备份Consul完成***"
echo "****************************"
赋权限: chmod +x task.sh backup.sh
运行定时任务启动脚本: ./task.sh
查看定时任务列表:crontab -l
如果要删除某个定时任务:crontab -e 删除想要删除的定时任务