首先查看 crontab是否安装
crontab -l # 列出当前的定时任务表
如果报 “command not found” ,就说明该crontab服务没有安装 如果报 “no crontab for ***” ,就说明已经安装crontab服务了, 不用再安装了
定时任务表的格式如下:
f1 f2 f3 f4 f5 program
- 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
- 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其余类推
- 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推
- 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推
- 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其余类推
实例
* * * * * /bin/ls /app >>/app/log.log
每月内的每天的每个小时的每分钟,列出/app目录下的文件名到/app/log.log文件中。
* */6 * * * /bin/bash my.sh
每隔6小时执行一次my.sh脚本
再来一个迷惑性的例子
每隔一小时执行一次任务
00 * * * *
00 */1 * * * #与上面是相同的任务
上面的写法是正确的吗? 这个定时任务会在每天的,每小时的0分执行任务,但这并不符合我们的要求,比如11.35启动定时任务,那么会在12点整执行一次任务,依次13点整。。。,虽然也能满足要求,但这并不是真正意义的每隔一小时,那么正确的写法如何?
*/60 * * * * #每隔60分钟执行一次任务。
编辑定时任务表
crontab -e #执行文字编辑器来设定时程表
mysql定期备份任务
创建备份脚本my.sh
DATE=`date '+%Y-%m-%d'` #形如2019-11-05
DATETIME=`date '+%Y-%m-%d-%H%M'` #形如2019-11-05-1748
#首先判断目录是否存在,如果不存在则创建,存在则不再创建
if [ ! -d "/app/beifen/${DATE}" ]
then
#echo "目录不存在"
mkdir /app/beifen/$DATE
fi
#在创建的目录下面创建日志文件
/app/mysql/bin/mysqldump -h localhost -uroot -p123456 test > /app/beifen/$DATE/$DATETIME.sql #mysql备份sql
使用crontab -e 将上面的脚本加入到定时任务
0 */6 * * * /bin/bash /app/beifen/my.sh #每隔6小时备份一次test数据库