crontab是Linux平台上实现任务定时调度的功能。
基本格式如下:
* * * * * command
分 时 日 月 周 命令
0-59 0-23 1-31 1-12 0-6 command
特殊符号的含义:
*:代表取值范围内的数字
/:代表“每”
-:代表从某个数字到某个数字
,:代表分散几个离散的数字
与crontab服务相关的几个命令:
1)查看crontab是否开启(两种方法)
方法一:ps –ef|grep crond
方法二:service crond status
2)crontab服务启动与关闭相关命令
启动crontab服务: /sbin/service crond start
关闭crontab服务: /sbin/service crond stop
重启crontab服务: /sbin/service crond restart
重新载入crontab服务: /sbin/service crond reload
3)如何编辑crontab任务(两种方式)
(1)针对系统任务(在/etc/crontab中添加)
(2)针对具体用户任务(通过crontab –e 添加)
实际上,crond服务每分钟不仅要读一次/var/spool/cron内的所有文件(这里面有各个用户的任务),还需要读一次/etc/crontab。因此,我们可以知道当我们修改了配置文件,最长一分中内生效。
4)crontab中常用的几个命令
crontab –l //列出某个用户cron服务的详细内容
crontab –e //编辑某个用户的cron服务
crontab –r //删除某个用户的cron服务
5)举几个crontab的栗子:
30 21 * * * /usr/local/etc/rc.d/lighttpdrestart
每晚21:30重启apache
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpdrestart
每月1、10、22日的4:45重启apache
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpdrestart
每周六、周日的1:10重启apache
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpdrestart
每天18:00至23:00之间每隔30分钟重启apache
0 23 * * 6 /usr/local/etc/rc.d/lighttpdrestart
每星期六的11:00 pm重启apache
* */1 * * * /usr/local/etc/rc.d/lighttpdrestart
每小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpdrestart
晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * * /usr/local/etc/rc.d/lighttpdrestart
每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpdrestart
一月一号4点重启apache
关于上面举的crontab栗子的总结:
首先要明白有5个时间参数,默认是*,即代表所有可能取值,取值的范围见上面基本格式的最后一行,如果将5个参数都设置为*,则粒度是最细的即:每月每周每日每小时每分钟,然后,我们根据需要,去泛化这些取值,便可以实现不同的任务调度需求。比如:我想要每三分中执行一次:则将之前本来分钟可能取值为1到59的范围除以3,即可实现每三分执行一次,命令如下:
*/3 * * * * 你需要执行的命令
6)问题:crontab中任务如果执行出错了呢?
比如正对root用户的crontab,可以在 /var/spool/mail/root文件中,查看crontab的执行日志记录。比如:
将echo命令写成cho,然后,运行crontab命令如下:
打开/var/spool/mail/zhou.hg可以看到如下日志: