Crontab简介
WIKI:crontab
命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρόνος),原意是时间。
通常,crontab
储存的指令被守护进程激活,crond
常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。
crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的crontab文件,该文件通常存放于/etc或者/etc之下的子目录中,而这个文件只能由系统管理员来修改。
crontab文件的每一行均遵守特定的格式,由空格或tab分隔为数个领域,每个领域可以放置单一或多个数值。
命令行结构
crontab [-u user] [file]
用指定的file代替某个用户目前的crontab文件,如果没有指定file,则接受标准输入(键盘)上键入的命令,并将他们加入到crontab目录下。
crontab [-u user] [-i] [-l | -e | -r]
-i 在删除某个用户crontab文件时提示确认信息(是/否)
-l 列出某个用户的crontab文件
-e 编辑某个用户的crontab文件
-r 删除 某个用户的crontab文件
例子:
sudo crontab -u buzhidao -l
打印用户buzhidao的crontab文件
sudo crontab -u buzhidao -e
打开并编辑用户buzhidao的crontab文件
sudo crontab -u buzhidao -i -r
提示你是否确认删除某个用户的crontab文件
crontab文件的内容命令格式
# 文件格式说明
# ——分钟 (0 - 59)
# | ——小时 (0 - 23)
# | | ——日 (1 - 31)
# | | | ——月 (1 - 12)
# | | | | ——星期 (0 - 7)(星期日=0或7)
# | | | | |
# * * * * * 被执行的命令(cmd)
注意:对于星期域,0和7都表示星期日,如果同时指定了日和星期,则如果其中任一条件满足,执行指令即被执行
操作符号
对于crontab文件的内容,每个 区域同时支持多个数值
1、用逗号‘,’分开多个值,例如3月、5月、8月、9月可以表示为3,5,8,9
2、用连接符'-'指定值的范围,例如1-6可以表示1,2,3,4,5,6
3、用*表示所有值,例如在小时域里的*代表每一个小时
例子:
0 1 * * 0-6 /usr/local/nginx/sbin/nginx -s reload
每天的凌晨1点重启nginx服务
0 */2 * * 0 /usr/local/nginx/sbin/nginx -s reload
周日每隔2小时重启nginx服务
0 1 * * 0,5 /usr/local/nginx/sbin/nginx -s reload
每周的周五、周日凌晨1点重启nginx服务
0,30 1-3 1 * * /usr/local/nginx/sbin/nginx -s reload
每月1日的凌晨1到3点,每隔30分钟重启nginx一次
0 23 8 5 * /usr/local/nginx/sbin/nginx -s reload
5月8日的晚上23点重启nginx服务
具体使用过程
下面以每隔10分钟自动重启nginx服务作为测试例子
系统:ubuntu11.10
#检查crontab是否启动
$service cron status
#打印root用户的crontab文件内容
$sudo crontab -u root -l
#打开并编辑root用户的crontab文件
$sudo crontab -u root -e
#默认用vi打开,加入以下命令 */10 * * * * /usr/local/nginx/sbin/nginx -s reload 保存并退出
$sudo crontab -u root -l
可以看到我们新加入的命令已经被载入,crontab进程会自动重新加载crontab文件
然后
#查看nginx进程运行状况
$ps -aux | grep nginx
通过输出的nginx的启动时间,可以看到我们设置的crontab命令已经起作用