Linux crontab 自动定时执行命令学习

来源:互联网 发布:java 日历选择控件 编辑:程序博客网 时间:2024/05/17 09:19

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命令已经起作用