循环定时任务之crontab命令简明入门

介绍过使用at命令进行一次定时任务之后,我们继续介绍Linux中使用更为广泛的循环定时任务crontab(crontab英文,定时任务的意思)命令。 crontab会根据你的日期、时间定义规则去循环执行指定任务,比如每天08点启动闹钟;比如每隔3个小时提醒你去喝一杯水;比如每个星期5下午4点定时发送工作周报;比如每个月的21日提醒你还清上个月的信用卡欠款;再比如每年在你女朋友生日前一天提醒你以避免忘记而被扁。

最常用的crontab命令

[mars@gms03 ~]$ crontab -e

使用-e选项会进入vi的编辑模式让您任务,需要注意到,每项任务都是占一行。

#分 时 日 月 周 命令

例1 比如每天8点启动闹钟

0 08 * * * echo "time to alert" > /home/mars/crontabnote.txt

例2 比如每隔3个小时提醒你去喝一杯水

* */3 * * * echo "time to drink" > /home/mars/crontabnote.txt

例3 比如每个星期五下午4点定时发送工作周报

0 16 * * 5 echo "time to send weekly report" > /home/mars/crontabnote.txt

例4 比如每个月的21日晚上10点提醒你还清上个月的信用卡欠款

0 22 21 * * echo "time to pay" > /home/mars/crontabnote.txt

例5 再比如每年在你女朋友生日前一天(8月9号)上午9点提醒你以避免忘记而被扁

0 9 09 08 * echo "time to happy birthday" > /home/mars/crontabnote.txt

查看是否开启crond进程

[root@gms03 ~]# ps -ef | grep crondroot 23878 1 0 2013 ? 00:00:01 crondroot 28023 27319 0 20:59 pts/4 00:00:00 grep crond

如果未开启,请开启

[root@gms03 ~]# /etc/init.d/crond startUsage: /etc/init.d/crond {start|stop|status|reload|restart|condrestart}

顺便查看是否是开机自启

[root@gms03 ~]# chkconfig --list | grep crondcrond 0:off 1:off 2:on 3:on 4:on 5:on 6:off开机自启[root@gms03 ~]# chkconfig --level 2345 crond on

定义任务执行规则

一般情况下当前用户只需使用-e选项就能够进入为自己定义循环任务的vim编辑界面,一个任务为一行,编辑完成之后保存即可,但是上面的一串*、数字啥的不了解怎么办?别急,这就为你简单道来: 每一个定时任务都有六项内容,每一项内容中间以空间间隔开来,这个六项内容依次为:

分钟 小时 日期 月份 星期 命令

0-59 0-23 1-31 1-12 0-7 命令

但是刚才的那个*符号哪去了,还是不要着急?下面就会介绍我们常用的几个辅助符号:

*(星号) 即通配符wildcard character,可以理解为“不论”,“不管,都符合”,比如上面的第一个例子就可以解释为:不管星期几,不管几月份,不管几号,08时00分执行。,(逗号) 代表分隔时段的意思。举例来说,如果要执行的任务是01:00与05:00时,就会是:

0 01,05 * * * command时间参数还是有五栏,不过第二栏是01,05,代表01与05都适用!

-(减号) 代表一段时间范围内,举例来说,08点到12点之间的每小时的20分都执行该任务:

20 08-12 * * * command时间参数还是有五栏,不过第二栏是08-12,代表08点到12点之间每隔20分钟都执行该任务!

/n(斜线) “/”代表”每”,而”n”代表数字,即是每隔n timeunit的意思,例如每五分钟进行一次,则:

*/5 * * * * command

crontab命令其他参数

注意下面的用户由mars变成了root

[root@gms03 ~]# crontab [-u username] [-l|-e|-r]选项与参数:-u :只有 root 才能进行这个任务,即root有权限内帮其他使用者创建/移除crontab任务;-e :编辑任务-l :list所有内容-r :移除所有的crontab任务,若仅要移除一项,请用-e选项进入vim界面去编辑。

crontab命令的权限管理

crontab同样采用配置文件的格式来管理用户是否能够写入crontab定时任务,/etc/cron.allow:将可以使用 crontab 的帐号写入其中,若不在这个文件内的使用者则不可使用 crontab;同理/etc/cron.deny:将不可以使用crontab的帐号写入其中,若未记录到这个文件当中的使用者,就可以使用crontab。

crontab任务存放位置

当用户定义了crontab循环执行任务之后,任务就会被写到以该用户命名的文件中,这个文件位于/var/spool/cron/,需要注意的是请勿直接编辑此文件,如果需要编辑任务请使用crontab -e。

[root@gms03 ~]# ls /var/spool/cron/mars[root@gms03 ~]# vim /var/spool/cron/mars0 08 * * * echo "time to alert" > /home/mars/crontabnote.txt0 08 * * * echo "time to alert" > /home/mars/crontabnote.txt0 16 * * 5 echo "time to send weekly report" > /home/mars/crontabnote.txt0 22 21 * * echo "time to pay" > /home/mars/crontabnote.txt0 9 09 08 * echo "time to happy birthday" > /home/mars/crontabnote.txt

crontab任务运行检查

查看指定规则的任务有无执行时,我们可以查看/var/log/cron文件内容,该文件详细记录了以1分钟为间隔的命令运行情况:比如另外一台机器的crontab执行日志:

[root@njdc-mars152 ~]# vim /var/log/cronMar 1 22:55:01 njdc-mars152 crond[25029]: (mars) CMD (/home/mars/AlertMonitor/runAlertMonitor.sh)Mar 1 23:00:01 njdc-mars152 crond[28218]: (root) CMD (/usr/lib64/sa/sa1 1 1)Mar 1 23:00:01 njdc-mars152 crond[28219]: (mars) CMD (/home/mars/AlertMonitor/runAlertMonitor.sh)Mar 1 23:01:01 njdc-mars152 crond[28692]: (root) CMD (run-parts /etc/cron.hourly)Mar 1 23:05:01 njdc-mars152 crond[32117]: (mars) CMD (/home/mars/AlertMonitor/runAlertMonitor.sh)

定义crontab任务注意点需要注意时间间隔问题,然后权衡任务执行资源的消耗情况,然后分配不同任务在不同时间段执行;周与日、月、不可同时并存,即指定了周几就不要再定义月、日,指定了月、日就不要再指定周几;命令中如果牵涉到路径,请一定使用绝对路径,另外如果有多条命令,则需要用&连接,或者将多条命令写在shell脚本中,然后crontab定期执行这个shell脚本即可。

循环定时任务之crontab命令简明入门

相关文章:

你感兴趣的文章:

标签云: