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"