# crontab crontab是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行,如果我要linux定时去执行某个脚本或者定时某个http请求,可以用crontab来实现 默认情况下,任何使用者只要不被列入 **/etc/cron.deny** 当中,那么他就可以直接下达**crontab -e**去编辑自己的例行性命令了!会进入 vi 的编辑画面, 然后以一个工作一行来编辑,编辑完毕之后输入**:wq**储存后离开 vi 就可以了! ## crontab的语法 ```bash crontab [-u username] [-l|-e|-r] 选项与参数: -u :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程; -e :编辑 crontab 的工作内容 -l :查阅 crontab 的工作内容 -r :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑 ``` ## /etc/crontab配置文件讲解 linux中 /etc/crontab ```bash SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed ``` 前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户,第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。 ## crontab的格式讲解 用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下: ```text minute hour day month week command ``` 其中: - minute: 表示分钟,可以是从0到59之间的任何整数。 - hour:表示小时,可以是从0到23之间的任何整数。 - day:表示日期,可以是从1到31之间的任何整数。 - month:表示月份,可以是从1到12之间的任何整数。 - week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。 - command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。 在这里还有一点是需要注意的是几个特殊的符号含义 - \*(星号) 代表任何时刻都接受的意思,*代表的是任何时候 - ,(逗号) 代表分隔字段的意思。例如: 15,30,45 * * * * command 代表的是每月每日每小时的15分,30分,45分的时候执行命令 - -(减号) 代表一段时间范围内。例如: 10 7-10 * * * command 代表的是每月每日的7点到10点的10分整时执行命令 - /n  那个 n 代表数字,也就是每隔 n 单位间隔的意思。例如 /5 * * * * command 代表的是每月每日每时每个5分钟执行一次 ### 实例 - 每1分钟执行一次 * * * * * command /1 * * * * command - 每小时的第15,30,45分钟执行 15,30,45 * * * * command - 7点到10点的第10,50分钟执行 10,50 7-10 * * * command - 每隔一天的7点到11点的第20和第40分钟执行 20,40 7-11 */1 * * command - 每周一的7点到11点的第25和第50分钟执行 25,50 7-11 * * 1 command - 每天的3:30执行 30 3 * * * command - 每月1、10、20日的3 : 30执行 30 3 1,10,20 * * command - 每周六、周日的3 : 30执行 30 3 * * 6,0 command 30 3 * * 6,7 command - 每天9点到16点之间每隔15分钟执行 /15 9-16 * * * command ## crontab的原理 当使用者使用 crontab 这个命令来创建工作排程之后,该项工作就会被纪录到 /var/spool/cron/ 里面去了,而且是以帐号来作为判别的!举例来说, css使用 crontab 后, 他的工作会被纪录到 /var/spool/cron/css 中,但请注意,不要使用 vi 直接编辑该文件, 因为可能由于输入语法错误,会导致无法运行 cron !另外, cron 运行的每一项工作都会被纪录到 /var/log/cron 这个登录档中. crond服务的最低侦测限制是分钟,所以 cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron 里面的数据内容 ,因此,只要你编辑完 /etc/crontab 这个文件,并且将他储存之后,那么 cron 的配置就自动的会来运行了, 如果你修改完的crontab或者添加的crontab没有马上的执行起来,那么你可以用 service crond restart 来重启. 特别注意的是 ```bash /etc/cron.deny 该文件中所列用户不允许使用crontab命令 /etc/cron.allow 该文件中所列用户允许使用crontab命令 ``` 最好是对crontab命令进行备份,因为 crontab -e 和crontab -r 中一个是写入 一个是删除,而e和r又相离很近,所以要注意这一点,很容易误删crontab这个文件. 新增调度任务可用两种方法: - 在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。 - 直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。 ---- > http://www.cnblogs.com/chenshishuo/p/5152068.html > http://www.cnblogs.com/longjshz/p/5779215.html