cron是一个在类Unix操作系统上的任务计划程序。它可以让用户在指定时间段周期性地运行命令或者shell脚本,通常被用在系统的自动化维护或者管理。cron的配置文件称为“crontab”,是“cron table”的简写。

1. 安装crontab

# yum install vixie-cron
# yum install crontabs

p.s.

  • vixie-cron 软件包是 cron 的主程序;
  • crontabs 软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。
  • cron 的主配置文件是 /etc/crontab

2. crond服务操作命令

# service crond start   // 启动服务
# service crond stop    // 关闭服务
# service crond restart // 重启服务
# service crond reload  // 重新载入配置
# service crond status  // 查看服务状态

在centos系统中加入开机自动启动crond服务:

# chkconfig --level 345 crond on

crond 服务(守护进程)在系统后台运行,并且会持续地检查 /etc/crontab 文件和 /etc/cron.*/目录。它同样也会检查 /var/spool/cron/ 目录。

3. crontab格式

crontab 的基本格式是:

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

crontab文件格式简写:

f1 f2 f3 f4 f5 cmd
  • 分钟(f1) 值从 0 到 59
  • 小时(f2) 值从 0 到 23
  • (f3) 值从 1 到 31
  • (f4) 值从 1 到 12
  • 星期(f5) 值从 0 到 6, 0 代表星期日

多个时间可以用逗号隔开,范围可以用连字符给出,星号可以作为通配符。空格用来分开字段。

  • 当 f1 为 * 时表示每分钟都要执行 cmd,f2 为 * 时表示每小时都要执行程序,依次类推
  • 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,依次类推
  • 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,依次类推
  • 当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,依次类推
  • 使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。

p.s.

当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可

后台运行命令:

$ nohup command > /dev/null 2>&1 &

4. crontab命令

语法:

crontab [-u user] file
crontab [-u user] [ -i ] { -e | -l | -r }

参数:

-e      (edit user's crontab)
-l      (list user's crontab)
-r      (delete user's crontab)
-i      (prompt before deleting user's crontab)

查看crontabs:

$ crontab -l

编辑 crontabs:

$ crontab -e

移除 crontabs:

$ crontab -r

如果用户有一个保存好的 crontab 想要用它完全覆盖旧的 crontab,可以使用:

$ crontab saved_crontab_filename

其中, 上面的saved_crontab_filename指的是已存在的crontab文件

5. crontab示例

在每个月的每一天的每一个小时的第一分钟(例如,在12:01,1:01,2:01等)执行命令 /bin/echo Hello, world!

01 * * * * /bin/echo Hello, world!

将会在一月的每个工作日每五分钟(例如,在12:00,12:05,12:10等)执行一次相同的命令。

*/5 * * jan mon-fri /bin/echo Hello, world!

将会在每分钟都执行命令/bin/echo Hello, world!

* * * * * /bin/echo Hello, world!

每天早上7点执行一次 /bin/ls :

0 7 * * * /bin/ls

在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup :

0 6-12/3 * 12 * /usr/bin/backup

周一到周五每天下午 5:00 寄一封信给 i@zhuxiongxian.com :

0 17 * * 1-5 mail -s "hi" i@zhuxiongxian.com < /tmp/maildata

每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分….执行 echo "haha"

20 0-23/2 * * * echo "haha"