分、时、日、月、周

例: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