一、特殊符号
*
每
/
每两分钟
*/2 * * * * echo oldboy>>/tmp/oldboy.txt
检查结果
看文件内容
看日志
容易混淆
每隔一分钟
*/1 * * * * echo oldboy>>/tmp/oldboy.txt
每小时的第一分钟
* * * * * echo oldboy>>/tmp/oldboy.txt
1 * * * * echo oldboy>>/tmp/oldboy.txt
-
范围 08-11
,
不连续 没有规律 08,09,10,11,
定时任务日志 /var/log/cron
例题
每天晚上09点到12点运行 systemctl restart network 命令
00 21-23,00 * * * systemctl restart network
- 每天上午7点到12点每2个小时和晚上22点运行 systemctl restart network 命令
00 07-12/2,22 * * * systemctl restart network
- 每天晚上12点 打包备份/etc/目录到/tmp下面
第1里程碑-命令行测试 (测试命令是否ok)
[root@wolf1 ~]# tar zcf /tmp/etc-`date +%F`.tar.gz /etc/
tar: Removing leading `/' from member names
第2里程碑-书写脚本并测试
1.书写脚本
[root@wolf1 ~]# ll /server
ls: cannot access /server: No such file or directory
[root@wolf1 ~]# mkdir -p /server/scripts/
[root@wolf1 ~]# ll /server/scripts/
total 0
[root@wolf1 ~]# vim /server/scripts/bak-etc.sh
#!/bin/bash
tar zcf /tmp/etc-`date +%F`.tar.gz /etc/
~
2.测试脚本
[root@wolf1 ~]# sh /server/scripts/bak-etc.sh
tar: Removing leading `/' from member names
[root@wolf1 ~]# ll /tmp/etc-2019-04-28.tar.gz
-rw-r--r-- 1 root root 10215344 Apr 28 09:54 /tmp/etc-2019-04-28.tar.gz
[root@wolf1 ~]#
第3里程碑-写入定时任务 检查(以分钟为单位)
[root@wolf1 ~]# crontab -e
#backup /etc/ to /tmp by long at 20190428
* * * * * sh /server/scripts/bak-etc.sh
[root@wolf1 /tmp]# tail -1 /var/log/cron
Apr 28 10:13:01 wolf1 CROND[38225]: (root) CMD (sh /server/scripts/bak-etc.sh)
You have new mail in /var/spool/mail/root
[root@wolf1 /tmp]# ll etc-2019-04-28.tar.gz
-rw-r--r-- 1 root root 10215344 Apr 28 10:13 etc-2019-04-28.tar.gz
第4里程碑-写入定时任务 根据要求改时间
[root@wolf1 ~]# crontab -e
00 00 * * * sh /server/scripts/bak-etc.sh
[root@wolf1 /tmp]# crontab -l
#backup /etc/ to /tmp by long at 20190428
00 00 * * * sh /server/scripts/bak-etc.sh
二、定时任务箴言(坑)
书写时一定要加一个注释
书写定时任务时候 尽量使用脚本
运行脚本使用sh
定时任务中%有特殊含义
在定时任务中命令和脚本 使用聚堆路径
用户的定时任务
用户家目录
系统定时任务
根下
- 在定时任务里面 每个脚本或命令 定向到空 或追加到文件
1.预备姿势
/dev/null 定向到黑洞
>/dev/null 2>/dev/null 正确的信息 错误信息 定向到黑洞中
>/dev/null 2>&1 正确的信息 错误信息 定向到黑洞中
&>/dev/null 正确的信息 错误信息 定向到黑洞中
追加到文件
>>/tmp/cron.log 2>&1 正确的信息 错误信息 定向到黑洞中
2.写法
[root@long ~]# crontab -e
#show time by liyy at 20190101
#*/2 * * * * date >>/tmp/time.log 2>&1
#* * * * * date +\%F_\%w >>/tmp/time.log 2>&1
#
#00 21-23,00 * * * date >>/tmp/time.log 2>&1
#backup /etc/ to /tmp by liyy at 20190101
00 00 * * * sh /server/scripts/bak-etc.sh >/dev/null 2>&1
3.原因
如果不定向到空或追加到文件
定时任务会以邮件的形式把 输出到屏幕的内容 发给你
4.故障案例
定时任务没有定向到空或追加到文件的故障
1.系统邮件服务开启
你就会不断收到邮件
You have mail in /var/spool/mail/root
2.系统邮件服务关闭 (大部分情况)
把没有发送出去的邮件 临时放弃来
/var/spool/postfix/maildrop (这个目录下面会有大量的小文件)
最后导致inode满了
5.定时任务运行脚本环境变量
定时任务运行脚本的时候PATH只识别/usr/bin和/bin下面的命令
解决
使用命令用绝对路径
脚本开头 重新设置 PATH
. /etc/profile
source /etc/profile