命令:crontab
选项:-e 编辑
-l 查看
格式
* * * * * 命令
分 时 日 月 周
例子
* * * * * 表示每分钟都执行
* 5-7 * * * 每天5点到7点,中 每分钟都执行
00 5-7 * * * 每天5点到7点,准点执行
00 02 * * 1,3,5 每周1、3、5 的凌晨2点执行
*/5 * * * * 每隔5分钟执行一次
crond编写思路
1.手动执行命令,然后保留执行成功的结果。
2.编写脚本
脚本需要统一路径/scripts
脚本内容复制执行成功的命令(减少每个环节出错几率)
脚本执行的输出信息可以重定向至其他位置保留或写入/dev/null
3.执行脚本
使用bash命令执行, 防止脚本没有增加执行权限(/usr/bin/bash)
执行脚本成功后,复制该执行的命令,以便写入cron
4.编写计划任务
加上必要的注释信息, 人、时间、任务
设定计划任务执行的周期
粘贴执行脚本的命令(不要手敲)
5.调试计划任务
增加任务频率测试
检查环境变量问题
检查crond服务日志
案例
每天凌晨3点做一次备份?备份/etc/目录到/backup下面 tar
1) 将备份命令写入一个脚本中
2) 每天备份文件名要求格式: 2020-01-01_hostname_etc.tar.gz
3) 存放备份内容的目录要求只保留三天的数据
4) 在执行计划任务时,不要输出任务信息
编写脚本
[root@container ~]# cat /opt/backup.sh
#!/usr/bin/bash
#1.使用tar命令备份/etc目录到backup目录
mkdir -p /backup
tar czf /backup/$(date +%F_%H_%M)_$(hostname)_etc.tar.gz /etc/
#2.保留最近3天的数据,其余全部删除
find /backup -type f -name "*.tar.gz" -mtime +3 -delete
授执行的权限
[root@container ~]# chmod +x /opt/backup.sh
[root@container ~]# /usr/bin/sh /opt/backup.sh
脚本编写好了,一定要测试,测试成功后,将成功的命令,在写入crontab中。
[root@container ~]# crontab -l
#00 03 * * * /usr/bin/sh /opt/backup.sh &>/dev/null
* * * * * /usr/bin/sh /opt/backup.sh &>/dev/null
问题
避免被误删
1.定时任务存到哪里去了
[root@container ~]# ll /var/spool/cron/USERNAME 的文件,文件名取决于你是什么用户
2.将定时任务的文件,定期备份起来即可。
1.写一个备份的脚本。
2.添加到定时任务中。
出问题怎么办?
1.拿到所有执行过的任务
[root@container ~]# grep "CMD" /var/log/cron | awk -F '(' '{print $3}' | sort |uniq
ntpdate time.windows.com &>/dev/null
/usr/bin/sh /opt/backup.sh &>/dev/null
2.根据执行的任务。去过滤 ,然后找到他的执行时间和周期。
[root@container ~]# grep "/usr/bin/sh /opt/backup.sh &>/dev/null" /var/log/cron
假设不希望yang使用 crontab
[root@container ~]# echo "oldxu" >> /etc/cron.deny
[root@container ~]# cat /etc/cron.deny
oldxu
测试
[oldxu@container ~]$ crontab -e
You (oldxu) are not allowed to use this program (crontab)
See crontab(1) for more information