定时任务之crontab命令

一、简介

crontab用于设置周期性被执行的命令
Linux系统中Linux调动工做分为两大类:
  一、系统执行的工做:系统周期性所要执行的工做,如备份系统数据、清理缓存
  二、我的执行的工做:某个用户按期要作的工做,例如每隔10分钟检查邮件服务器是否有新信,这些工做可由每一个用户自行设置
/etc/crtontab
  系统调度的任务通常存放在/etc/crontab这个文件下,里面存放了一些系统运行的调度程序,经过命令cat crontab查看
  这些任务会在系统运行起来自动调用
/var/spool/cron
  每一个用户都会生成自动生成一个本身的crontab文件,通常位于/var/spool/cron目录下
  执行命令crontab -r 就会删除当前用户的crontab文件。例如你切换到suifeng帐号下,执行了该命令,那么/var/spool/cron/suifeng文件就会删除,若是要建立该文件只须要用crontab -e命令便可。
  注意,普通用户通常没有权限访问/var/spool/cron
/etc/crontab.deny文件与/etc/crontab.allow文件
  一、分别表示不能使用crontab命令的用户、以及可以使用crontab命令的用户
  二、两个文件同时存在crontab.allow文件优先
  三、两个文件都不存在则只有root用户才拥有调用该命令
 

二、语法

crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ]
各个参数说明:
  1. -e [UserName]: 执行文字编辑器来设定时程表,内定的文字编辑器是 vi(能够指定别的用户,可是必须拥有权限)
  2. -r [UserName]: 删除目前的时程表
  3. -l [UserName]: 列出目前的时程表
  4. -v [UserName]:列出用户cron做业的状态
建立定时任务
  crontab -e进入文本(vi)编辑状态
  * * * * * command path  // 前五个字段能够取整数值,指定什么时候开始工做,第六个域是字符串,即命令字段,其中包括了crontab调度执行的命令。 各个字段之间用spaces和tabs分割。
(可将命令写入.sh脚本文件中,并赋予可执行的权限便可)
调度命令的规则:
字段名称 说明 取值范围
分钟 每小时的第几分钟执行 0-59
小时 每日的第几个小时执行 0-23
日期 每个月的第几天执行 1-31
月历 每一年的第几月执行 1-12
星期 每周的第几天执行 0-6
命令名称 欲执行的命令及参数  
crontab命令中的一些经常使用特殊符号:
符号 说明
* 表示任什么时候刻
, 表示分割
表示一个段,如第二段里: 1-5,就表示1到5点
/n 表示每一个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也能够写成1-23/1.
查看定时任务:crontab -l
删除定时任务:crontab -r
 

三、使用示例

实例1:
  每1分钟执行一次command
  命令:* * * * * command
实例2:
  每小时的第3和第15分钟执行
  命令:3,15 * * * * command
实例3:
  在上午8点到11点的第3和第15分钟执行
  命令:3,15 8-11 * * * command
实例4:
  每隔两天的上午8点到11点的第3和第15分钟执行
  命令:3,15 8-11 */2 * * command
实例5:
  每一个星期一的上午8点到11点的第3和第15分钟执行
  命令:3,15 8-11 * * 1 command
实例6:
  每晚的21:30重启smb 
  命令:30 21 * * * /etc/init.d/smb restart
实例7:
  每个月一、十、22日的4 : 45重启smb 
  命令:45 4 1,10,22 * * /etc/init.d/smb restart
实例8:
  每周6、周日的1 : 10重启smb
  命令:10 1 * * 6,0 /etc/init.d/smb restart
实例9:
  天天18 : 00至23 : 00之间每隔30分钟重启smb 
  命令:0,30 18-23 * * * /etc/init.d/smb restart
实例10:
  每星期六的晚上11 : 00 pm重启smb 
  命令:0 23 * * 6 /etc/init.d/smb restart
实例11:
  每一小时重启smb 
  命令:* */1 * * * /etc/init.d/smb restart
实例12:
  晚上11点到早上7点之间,每隔一小时重启smb 
  命令:* 23-7/1 * * * /etc/init.d/smb restart
实例13:
  每个月的4号与每周一到周三的11点重启smb 
  命令:0 11 4 * mon-wed /etc/init.d/smb restart
实例14:
  一月一号的4点重启smb 
  命令:0 4 1 jan * /etc/init.d/smb restart
实例15:
  每小时执行/etc/cron.hourly目录内的脚本
  命令:01 * * * * root run-parts /etc/cron.hourly
  说明:run-parts这个参数了,若是去掉这个参数的话,后面就能够写要运行的某个脚本名,而不是目录名
实例16:
  一、天天23点59分后台执行test.sh脚本;并将标准输出写入log.txt中
  命令:59 23 * * * /home/suifeng/scripts/test.sh >/home/suifeng/log.txt &
  二、同上
  命令:59 23 * * * /home/suifeng/scripts/test.sh 1>/home/suifeng/log.txt &
  三、天天23点59分后台执行test.sh脚本;并将错误输出写书log.txt中
  命令:59 23 * * * /home/suifeng/scripts/test.sh 1>/home/suifeng/log.txt &
  四、天天23点59分后台执行test.sh脚本;并将错误输错当作标准输出(即将错误输出和标准输出所有写入log.txt中)
  命令:59 23 * * * /home/suifeng/scripts/test.sh 1>/home/suifeng/log.txt 2>&1 &
相关说明:
  0表示键盘输入
  1表示标准输出
  2表示错误输出
  &表示后台执行
  >>表示追加
  >表示覆盖写
注意:
  一、当在前台运行某个做业时,终端被该做业占据;而在后台运行做业时,它不会占据终端。可使用&命令把做业放到后台执行。
  二、须要用户交互的命令不要放在后台执行,由于那样子机器将会在那一直等待
  三、做业在后台运行时,同样会将结果输出在屏幕上,干扰你的正常工做。所以咱们最好将输出重定向到某个文件中
 

四、crond服务

经过 chkconfig --list | grep cron 命令来查看cron服务的启动状况:
[root@***** home]# chkconfig --list | grep cron crond 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
咱们能够看到,系统启动级别若是是1-4,cron服务都会开机自动启动的,咱们能够经过以下命令来设置该服务的启动项:
  /sbin/service crond start
  /sbin/service crond stop
  /sbin/service crond restart
  /sbin/service crond reload
以上1-4行分别为启动、中止、重启服务和从新加载配置。
要把cron设为在开机的时候自动启动,在 /etc/rc.d/rc.local 脚本中加入 /sbin/service crond start 便可。
查看crontab服务状态:
service crond status
 

五、我的经验总结

  咱们使用这个命令大多都是运行相关的脚本文件,最多见的就是定时调用http请求进行数据采集或者数据库的备份等等。所以当咱们本身所写的脚本文件中含有文件引入时,最好采用绝对路径,不然将会引入失败从而致使定时任务失败。
 
 

(以上是本身的一些看法,如有不足或者错误的地方请各位指出)php

 做者:那一叶随风   http://www.cnblogs.com/phpstudy2015-6/html

 原文地址:http://www.cnblogs.com/phpstudy2015-6/p/7534968.html数据库

 声明:本博客文章为原创,只表明本人在工做学习中某一时间内总结的观点或结论。转载时请在文章页面明显位置给出原文连接缓存

相关文章
相关标签/搜索