Linux crontab 命令安装使用

目录

  • Linux crontab 命令
    • 1. 安装Crontab
    • 2. crontab服务启动与关闭
    • 3. 配置文件
      • 3.1 全局配置文件
        • 3.1.1 crontab文件
        • 3.1.2 cron.allow / cron.deny文件:
      • 3.2 用户配置文件
    • 4. crontab 命令

链接:Linux 公社

Linux crontab 命令

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

注意
新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。

linux 任务调度的工作主要分为以下两类

  1. 系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
  2. 个人执行的工作:某个用户定期要做的工作,例如每隔 10 分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

1. 安装Crontab

  • 失败:
[root@CentOS ~] yum -y install vixie-cron
[root@CentOS ~] yum -y install crontabs

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

  • 成功
#安装crontab
[root@CentOS ~] yum install cronie

2. crontab服务启动与关闭

  1. cron 是 linux 的内置服务,可以用以下的方法启动、关闭这个服务:
service crond start     //启动服务
service crond stop      //关闭服务
service crond restart   //重启服务
service crond reload    //重新载入配置
service crond status    //查看crontab服务状态
  1. 要把cron设为在开机的时候自动启动

两种方式:
1、在 /etc/rc.d/rc.local 脚本中加入 /sbin/service crond start 即可
2、在CentOS系统中加入开机自动启动: chkconfig --level 345 crond on【在运行级别3、4、5上让crond服务开机自动启动】链接: chkconfig命令介绍

  1. crontab操作
crontab -l //查看当前用户的crontab;
crontab -e //编辑crontab;
crontab -r //删除crontab.

3. 配置文件

3.1 全局配置文件

在/etc目录下面存在

  1. cron.hourlycron.dailycron.weeklycron.monthlycron.d五个目录
  2. crontab,cron.deny二个文件

cron.daily            是每天执行一次的job
cron.weekly         是每个星期执行一次的job
cron.monthly       是每月执行一次的job
cron.hourly          是每个小时执行一次的job
cron.d                  是系统自动定期需要做的任务
crontab                是设定定时任务执行文件
cron.deny            文件就是用于控制不让哪些用户使用Crontab的功能

3.1.1 crontab文件

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

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# 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
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
# 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 变量可以用来设置在执行命令或脚本时使用的主目录。

3.1.2 cron.allow / cron.deny文件:

/etc/cron.allow/etc/cron.deny 文件被用来限制对 cron 的使用
注意:

  1. 这两个使用控制文件的格式都是每行一个用户
  2. 两个文件都不允许空格
  3. 如果使用控制文件被修改了,cron 守护进程(crond)不必被重启
  4. 使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取
  5. 无论使用控制文件中的规定如何,root 都总是可以使用 cron
  6. 如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略
  7. 如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用 cron
  8. 如果两个文件都不存在只有root可以提交任务

总结:linux的cron配置文件中cron.deny 和cron.allow 只能有一个文件存在或者都不存在,里面没有内容不会发生什么事,其中一个文件写了内容才会生效,同时存在且都有内容时,cron.allow优先

cron.allow文件和crontab命令的关系
同root一样,普通用户也可以使用cron来重复运行程序。要执行的任务通过crontab命令来提交给cron执行。root通过/var/adm/cron/cron.allow文件来控制谁有权使用crontab命令。如果用户的名字出现在cron.allow文件中,他就有权使用crontab命令。如果cron.allow文件不存在,系统会检查/var/adm/cron/cron.deny文件来确定是否这个用户被拒绝存取。如果两个文件都存在,cron.allow有优先权。如果两个文件都不存在,只有root可以提交任务。如果cron.deny文件为空文件,所有的用户都可以使用crontab.


3.2 用户配置文件

每个用户都有自己的cron配置文件,通过crontab -e 就可以编辑,一般情况下我们编辑好用户的cron配置文件保存退出后,系统会自动就存放于/var/spool/cron/目录中,文件以用户名命名.linux的cron服务是每隔一分钟去读取一次/var/spool/cron,/etc/crontab,/etc/cron.d下面所有的内容.


4. crontab 命令

功能:设置计时器。
语法:crontab[-u <用户名称>][配置文件] 或 crontab [-u <用户名称>][-elr]
解释:cron 是一个常驻服务,它提供计时器的功能,让用户在特定的时间得以执行预设的指令或程序。只要用户会编辑计时器的配置文件,就可以使 用计时器的功能。其配置文件格式如下:Minute Hour Day Month DayOFWeek Command

参数
-e 编辑该用户的计时器设置。
-l 列出该用户的计时器设置。
-r 删除该用户的计时器设置。
-u <用户名称> 指定要设定计时器的用户名称。

格式:

*       *        *        *        *           command
minute hour day month week command
星期 命令
  • minute: 表示分钟,可以是从0到59之间的任何整数。
  • hour:表示小时,可以是从0到23之间的任何整数。
  • day:表示日期,可以是从1到31之间的任何整数。
  • month:表示月份,可以是从1到12之间的任何整数。
  • week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
  • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

特殊字符:
星号(*):代表每的意思,例如month字段如果是星号,则表示每月都执行该命令操作。
逗号(,):表示分隔时段的意思,例如,“1,3,5,7,9”。
中杠(-):表示一个时间范围,例如“2-6”表示“2,3,4,5,6”。
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次

例子:

##每月每天凌晨3点30分和中午12点20分执行test.sh脚本
30 3,12 * * *  /home/test.sh           

##每月每天每隔6小时的每30分钟执行test.sh脚本
30 */6 * * *  /home/test.sh

##每月每天早上8点到下午18点每隔2小时的每30分钟执行test.sh脚本
30 8-18/2 * * * /etc/init.d/network restart

##每月每天晚上21点30分执行test.sh脚本
30 21 * * *  /etc/init.d/network restart

##每月1号、10号、22号凌晨4点45分执行test.sh脚本
45 4 1,10,22 * * /etc/init.d/network restart

##8月份周一、周日凌晨1点10分执行test.sh脚本
10 1 * 8 6,0 /etc/init.d/network restart

##每月每天每小时整点执行test.sh脚本
00 */1 * * *  /etc/init.d/network restart

注意:
#写法不规范,分钟应该写成 00
* 23,00-07/1 * * * /etc/init.d/network restart  

 ##强调,周和日尽量不要同时使用,否则达不到想要的效果
 00 11 * 4 1-3 /etc/init.d/network restart 
 
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启apache。

* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache

* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache

0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache

*/30 * * * * /usr/sbin/ntpdate 210.72.145.44
每半小时同步一下时间

你可能感兴趣的:(Linux,linux,运维,服务器)