分、时、日、月、周
例:gentoo用户每3个小时echo 123
很多同学看到这个问题给出了如下的答案,我们看看其错在何处?
同学A:0 3 * ** gentoo /bin/echo 123
同学B:* */3 * * * gentoo /bin/echo 123
同学C:0 */3 * * * gentoo /bin/echo 123
A:错误,A同学把“时”位原本应该表示3点数据理解成为了3小时
B:错误,A同学把*号理解到到位,分位上的*号就表示每分钟,如果*号在时位上就表示每小时,如果按照B同学的写法应该是这个意思:“每3个小时的每一分钟都要执行一次echo”
C:正解
6 7 * * *每天的七点六分
6 7 8 * *每月的8日7时6分
6 7 * * 5这是每周5的7点6分
6 7 3 * 5 每月的三号还得是周五的7点6分
30-35 7 * * *每天的7点30、31、32、33、34、35各执行一次
5,35 ****每个小时的第5分和35分都执行一次任务
5,35/3 * * ** 每个小时的5分到第35分,每隔分隔3分钟执行一次
每两个小时执行一次任务:0 *\2 * * *
NOTE:“日”并不是比周小,所以在设置“周”的时候“日”并不用有所体现。
秒级任务
怎样使用crond运行秒级任务,想要在crond当中运行秒级任务的话,必需结果其他的方法,比如for循环和while循环.
例1:每20秒打印hello!
***** for i in {0,1,2};do /bin/echo “hello!”; sleep 20 ;done
*****这就代表每分钟,一分钟到了之后i就等于0,然后就运行echo hello!运行完成之后就睡20秒,20秒睡完了,i又等于1了,然后再打印,然后再睡20秒,然后i等于3,再打印,再睡着.............从而实现每隔20秒打印一次的效果。
例2;每秒打印一次hello!
***** for i in {1..60};do /bin/echo “hello!”; sleep 1 ;done
解释:一分种到了之后,i先等于1之后就echo,然后睡一秒,i又等于2了,再echo ...............,一分种有60个一秒。
练习
例1:每4个小时备份一次/etc/目录到/bakup目录当中,保存的文件名格式为“etc-yyyy-mm-dd-hh.tar.xz”
0 */4 * * * /bin/tar -Jcf /badkup/etc-`/bin/date +%F-%H`.tar.xz /etc/*
例2:每周2,4,7备份/var/log/messages文件至至/backup目录中,文件名形如”messages-yyyymmdd.tar,gz”
0 0 ** 2,4 ,7 /bin/tar -zcf /backup/messages-`date +\%Y\%m\%d`.tar.gz /var/log/messages
例3:每两个小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中
0 */2 * * * /bin/grep "^[SM]" /proc/meminfo >> /tmp/meminfo.txt
例4:工作日时间内,每小时执行一次ip addr show 命令
0 */1 * * 1-5 /sbin/ip addr show
例5:每3分钟执行一个echo how are you?
*/3 * * * * /bin/echo “how are you?” #必须是绝对路径
例6:每周2,4,6备份/etc/目录到backup目录中,备份的文件名的当etc_开头并跟上当日的日期文件名
0 0 * * 2,4,6 tar –jcf /backup/etc_`date +’%F`.tar.xz /etc/* #比周二小的都要有值,天并不比周二小
例7: 每天的6,9,12,15,18时查看一下当前系统挂载的文件系统,并将查看结果追加到/tmp/mounts.txt文件
0 6,9,12,15,18 * * * /bin/mount >>/tmp/mounts.txt
例8: 每天每两个小时取当前系统内存空间余量,将其保存到/stats/memory.txt文件下
0 */2 *** /bin/grep “^MemFree” >> /stats/memory.txt