Crontab不知疲倦的时间表-Alkaid

Crontab简介

 

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。

crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的crontab文件,该文件通常是/etc/crontab,而这个文件只能由系统管理员来修改。

cronie:主程序包,提供crond守护进程及相关辅助工具。

crontabs:系统自带的一些计划任务。

cronie-anacron:cronie的补充程序,用于监控cronie任务的执行状况。

对于24小时开机运行的服务器可能用不到的,但是对非24小时开机,又想定时运行任务的机器还是十分有用的。

anacrontab负责执行 /etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly 中的系统任务。
当执行任务时,更新/var/spool/anacron/文件的时间戳。

anacron的配置与cron类似,也是要首先配置一个叫anacrontab的文件,其文件格式说明一般在manual里有man anacrontab

anacron的工作原理参考这里:http://blog.csdn.net/deerlux/article/details/51090531


crontab在 /etc 目录下面存在 cron.d、cron.daily、cron.weekly、cron.monthly、cron.hourly 五个目录和 crontab、cron.deny 二个文件。

在/var/spool下面存在着两个目录cron,anacron。

crond服务每隔一分钟去读取一次/var/spool/cron,/etc/crontab,/etc/cron.d 下面的所有内容,以实现任务的执行。


crontab的权限控制

/etc/cron.allow 和 /etc/cron.deny 文件被用来限制对 cron 的使用。
这两个控制文件的格式都是每行一个用户。两个文件都不允许有空格。
如果控制文件被修改了,cron守护进程 crond 不必重启。控制文件在每次用户添加或删除一项 cron 任务时都会被读取。

/etc/cron.allow 的优先级高于 /etc/cron.deny。
如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且cron.deny 文件会被忽略。
如果 cron.allow 文件不存在,所有在cron.deny 中列出的用户都被禁止使用 cron。

crontab命令

crontab -e

crontab -e 命令可以在vi中编辑任务, 如下面代码每一分钟向文本写入当前日期

创建任务后, 可以用 crontab -l 查看当前用户的任务列表

 

命令格式如下:

分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天)  命令

*                *               *                 *                          *              command

  • minute: 表示分钟,可以是从0到59之间的任何整数。
  • hour:表示小时,可以是从0到23之间的任何整数。
  • day:表示日期,可以是从1到31之间的任何整数。
  • month:表示月份,可以是从1到12之间的任何整数。
  • week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
  • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符:

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

 

例子:

 

或者利用shell脚本和crontab进行配合:

例如下面的shell脚本,一个对目录进行打包,并按时间命名:

直接将其利用命令加入:

重启crond服务: