Linux crontab 学习

crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。通常,crontab储存的指令被守护进程激活。crond 常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

一、安装

[root@CentOS ~]# yum -y install vixie-cron
[root@CentOS ~]# yum -y install crontabs

说明:
vixie-cron 软件包是 cron 的主程序;
crontabs 软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。

二、配置

cron 是 linux 的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
service crond start     //启动服务
service crond stop      //关闭服务
service crond restart   //重启服务
service crond reload    //重新载入配置
service crond status    //查看crontab服务状态

在CentOS系统中加入开机自动启动: chkconfig --level 345 crond on

cron 的主配置文件是 /etc/crontab,它包括下面几行:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

前四行是用来配置 cron 任务运行环境的变量。
SHELL 变量的值告诉系统要使用哪个 shell 环境(在这个例子里是 bash shell);
PATH 变量定义用来执行命令的路径。
cron 任务的输出被邮寄给 MAILTO 变量定义的用户名。
如果 MAILTO 变量被定义为空白字符串(MAILTO=""),电子邮件就不会被寄出。
HOME 变量可以用来设置在执行命令或脚本时使用的主目录。


限制对 cron 的使用:

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

无论使用控制文件中的规定如何,root 都总是可以使用 cron。

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




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

cron.d是系统自动定期需要做的任务,但是又不是按小时,按天,按星期,按月来执行的,那么就放在这个目录下面。

如果是按小时,按天,按星期,按月的来执行的话,则可以放到相应的目录下面去。
cron.hourly是每个小时执行一次的任务
cron.daily是每天执行一次的任务
cron.weekly是每个星期执行一次的任务
cron.monthly是每月执行一次的任务

Linux下的Crontab使用详解

crontab命令格式
crontab [-u user] file
crontab [-u user] { -e | -l | -r }

-u 参数的详细说明:
如果使用该选项,就是指定了是某个具体用户的crontab文件将被修改。如果不指定该选项,crontab 将默认是当前操作用户的crontab ,也就是执行该crontab命令用户的crontab文件将被修改。

注意: 如果使用了su命令再运行crontab命令很可能就会出现混乱的情况,因此使用了su命令时,最好使用-u选项来指定究竟是哪个用户的crontab文件。

crontab常规使用方式 :

crontab [-u user] file   -用指定的文件替代目前的crontab
crontab [-u user] -l     -列出用户目前的crontab
crontab [-u user] -e     -编辑用户目前的crontab
crontab [-u user] -r     -删除某个用户的crontab

特别注意: 如果用crontab -r  就删除了所有的定时任务(需要特别小心)

crontab是通过读取一个crontab文件来工作,系统主配置文件是crontab, /etc/crontab 文件中的每一行都代表一项任务,crontab文件有六个域。

crontab文件的格式是:M H D m d cmd

每个域之间用空格或者Tab键分开,前五个域都是整数或者*,基本格式如下(括号里面是取值范围):

# Use the hash sign to prefix a comment

# +—————- minute (0 - 59)

# |  +————- hour (0 - 23)

# |  |  +———- day of month (1 - 31)

# |  |  |  +——- month (1 - 12)

# |  |  |  |  +—- day of week (0 - 7) (Sunday=0 or 7)

# |  |  |  |  |

f1 f2 f3 f4 f5  command

分 时 日 月 周 命令

f1 — 分钟,从 0 到 59 之间的任何整数
f2 — 小时,从 0 到 23 之间的任何整数
f3 — 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期)
f4 — 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等)
f5 — 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日(或使用星期的英文简写如 sun、mon 等等)
command — 表示要执行的任务(可以使运行linux系统命令,也可以是执行你自行编写的linux脚本命令。)


周与日月不可同时并存

另一个需要注意的地方在於:『你可以分别以周或者是日月为单位作为循环,但你不可使用「几月几号且为星期几」的模式工作』。 这个意思是说,你不可以这样编写一个工作排程:

30 12 11 9 5 root echo "just test"   <==这是错误的写法

 本来你以为九月十一号且为星期五才会进行这项工作,无奈的是,系统可能会判定每个星期五作一次,或每年的 9 月 11 号分别进行,如此一来与你当初的规划就不一样了~所以罗,得要注意这个地方!上述的写法是不对的!




Summary:

* 表示该范围内任意时间 0 17 * * 1-5 表示周一到周五每天的17点

, 表示间隔的多个不连续的时间点, 15 20 * * 1,3,5 表示每周一,三,五晚8点15分

- 表示连续的时间范围, 0 8-18/2 * * * 表示8点到18点每隔2小时

/ 表示间隔的时间频率  0 * */3 * * 表示每隔3天


整数间的逗号(,)的作用 :
当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其余类推

crontab的常用例子 :

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

#每天早上6点10分
10 6 * * * date

#每两个小时
0 */2 * * * date

#晚上11点到早上8点之间每两个小时,早上8点
0 23-7/2,8 * * * date

#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * mon-wed date

#1月份日早上4点
0 4 1 jan * date

linux系统的管理员经常用到crontab的例子 :

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

#每晚的21:30重启apache。
30 21 * * * /etc/init.d/apache2 restart

#每月1、10、22日的4 : 45重启apache
45 4 1,10,22 * * /etc/init.d/apache2 restart

#每周六、周日的1 : 10重启apache。
10 1 * * 6,0 /etc/init.d/apache2 restart

#在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0,30 18-23 * * * /etc/init.d/apache2 restart

#每星期六的11 : 00 pm重启apache。
0 23 * * 6 /etc/init.d/apache2 restart

#每一小时重启apache
* */1 * * * /etc/init.d/apache2 restart

#晚上11点到早上7点之间,每隔一小时重启apache
* 23-7/1 * * * /etc/init.d/apache2 restart

#每月的4号与每周一到周三的11点重启apache
0 11 4 * mon-wed /etc/init.d/apache2 restart

#1月1日的4点重启apache
0 4 1 jan * /etc/init.d/apache2 restart



Example, 
*/1 * * * * * date >> 
它的意思就是每过1分钟就向time.log文件中写入当然的系统时间.




维护计划任务列表

1. crontab -l 查看当前用户的计划任务列表

2. crontab -l -u root 加上u可查看某一用户的定时任务

3. crontab -r -u root 将root的定时任务删除

查看crontab服务状态:

service crond status

手动启动crontab服务:

service crond start

查看crontab服务是否已设置为开机启动,执行命令:

ntsysv

加入开机自动启动

chkconfig –level 35 crond on


4. 脚本中涉及文件路径时写全局路径






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值