Linux系统管理之 crond 与 crontab

来源:互联网 发布:mac versions 破解版 编辑:程序博客网 时间:2024/05/29 15:32

cron是任务的意思,tab 表示table。crontab 可以理解为,任务时间表。 crontab 命令是用来让计算机替我们执行周期性任务,比如要在每周二的凌晨五点重启服务器,每天凌晨执行一次备份任务。主要管理以分钟、小时、日、月、周,为周期来执行定期任务。守护进程 crond 为 crontab 命令提供服务。

准备工作

在使用命令之前,首先要确保服务已安装并启动。

1、查看 crond 服务是否安装(守护进程 crond 为 crontab 命令提供服务)
[root@www time]# chkconfig --list | grep crondcrond           0:off   1:off   2:on    3:on    4:on    5:on    6:off[root@www time]# # 3 和 5 级别是字符界面和图像界面这两个 on就表示已经安装并开机自启动
2、查看服务是否在运行
[root@www time]# service crond statuscrond (pid  2187) is running...[root@www time]# 

显示服务正在运行,如果没有运行可以执行service crond restart 重新启动一下服务。

认识命令

1、crontab 的白名单与黑名单

像 at 命令一样,在系统的 /etc目录下可能会有两个使用 crontab 的限制文件。
一个可以叫做白名单/etc/cron.allow,用来记录那些用户可以使用 crontab。另一个叫做黑名单 /ect/cron.deny,用来限制那些不用户不能使用 crontab黑名单对root 是无效的。

当两个文件都存在时,以 白名单为准。当两个文件都不存在时,只有root可以。一般系统中只有黑名单文件,因为每个用户所执行的定时任务都与他自身的用户权限有关。

2、命令介绍以及命令格式说明
[root@www time]# crontab [选项]# 选项:-e :使用 vim 编辑 crontab 定时任务,可添加或删除,默认为空,只需按照格式写入即可-l :查询 crontab 任务,以打印的方式-r :删除当前用户所有的 crontab 任务

如果要设定定时任务,在命令行下输入 crontab -e 进入vim 编辑页面,默认是空白文件,此时需要按照下面的格式去书写定时任务:

* * * * *  执行的任务

crontab 任务格式一共有六项,前五个“ * ” 指定时间,分别是分钟、小时、日、月、周。最后一项是要执行的任务。


3、五个 “*” 的具体含义:
位置 意义 范围 第一个 “ * ” 一小时当中的第几分钟。 0-59 第二个 “ * ” 一天当中的第几小时。 0-23 第三个 “ * ” 一月当中的第几天。 1-31 第四个 “ * ” 一年当中的第几月。 1-12 第无个 “ * ” 一周当中的星期几。 0-7(0,7都表示星期日)
# Example of job definition:# .---------------- minute (0 - 59)# |  .------------- hour (0 - 23)# |  |  .---------- day of month (1 - 31)# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# |  |  |  |  |# *  *  *  *  * command to be executed

还有几个特殊符号需要注意:

符号 含义 举例 * 表示任意时间的意思。 比如 “* * * * * 任务” 就代表每分钟执行一次 逗号“,” 代表不连续的时间。 比如 “ 0 1,3 * * * 任务” 就代表每天的1点整,3点整分别都执行一次 短杠“-” 代表连续的时间范围。 比如 “0 2 * * 1-3 任务” 就代表每周一到周三的凌晨2点0分执行任务 */n 代表每隔多久执行一次。 比如 “*/30 * * * * 任务” 就代表每三十分钟执行一次任务
4、crontab 时间的练习:

1、 30 21 * * * 任务 是什么意思?

答:每天的 21 点 30 执行任务。

2、0 20 * * 1 任务是什么意思?

答:每周一的 20 点 00 分执行任务。

3、0 8 1,15,25 * * 任务是什么意思?

答:每月1 号 ,15 号,25号的8 点 00 分 执行任务。

4、 */10 3 * * * 任务 是什么意思?

答:每天凌晨 3 点钟 每个十分钟执行一次任务。

5、0 1 1,10 * 2 任务 是什么意思?

答:每月的周二或每月的 1号 ,10号 的凌晨 1点00分执行任务。这里并不是每月的1号 ,10号并且还要是周二才执行


使用及注意事项

1、使用实例

食材已经准备好了,现在开始做菜吧。

要求:

  1. 要在每周二的凌晨三点重启服务器
  2. 每月的1,10,30号的凌晨五点执行/root/sh/autobackup.sh 自动备份脚本
  3. 每五分钟向 /tmp 目录下的 test.log文件写入一行 “hello world

演示:

(1)、命令行下输入 crontab -e 进入编辑页面

第一个要求:

0 3 * * 2 /sbin/shutdown -r now

第二个要求写入

0 5 1,10,30 * * /root/sh/autobackup.sh

第三个要求写入

*/5 * * * * /bin/echo "hello world"  >> /tmp/test.log

crontab-e

然后保存退出,查看:

这里写图片描述

此时已经生效,如果需要删除单条任务,再次编辑删除单行即可,如果需要都删除,加参数 -r:

这里写图片描述

2、 crontab 注意事项

一、六个选项都不能为空,必须填写,如果不确定可以使用 * 表示任意时间。

二、crontab 定时任务,最小时间是分钟,最大是月,不能指定多少秒或多少年。

三、在写时间时,尽量不要把日期和星期写在一起,都是用天表示单位,容易混乱。

四、定时任务中,最好使用绝对路径,因为 进程可能有自己的环境变量。


扩展

如果需要指定用户执行定时任务,可以在配置文件/etc/crontab中添加内容,需要在上面的格式命令之前加上用户名。

如果服务器可能出现故障,需要确保定时任务的执行,可以使用服务 anacron,将需要按照日、周、月执行的的脚本放到目录/etc/cron.{daily | weekly | monthly}中。在配置文件/ect/anacrontab中可以配置,执行时间的范围,以及强制延时时间。