Linux 定时任务【转载,整理】

目前,我已知的定时任务实现方法有两种:cron or systemd job,这里主要介绍cron的用法

一.crontab 简介

  crontab命令的功能是在一定的时间间隔调度一些命令的执行。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。

  cron 系统调度进程。 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业。

  crontab命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件来保存调度信息。系统管理员可以通过cron.deny 和 cron.allow 这两个文件来禁止或允许用户拥有自己的crontab文件。

二. 配置文件

  cron的配置文件称为“crontab”,是“cron table”的简写。
  1. /var/spool/cron/ 这个目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名,比如tom建的crontab任务对应的文件就是/var/spool/cron/tom。
    一般一个用户最多只有一个crontab文件。

    如果你用命令crontab -r 就会删除当前用户的crontab文件,例如你切换到oracle账号下,执行了该命令,那么/var/spool/cron/oracle文件就会删除,如果要创建该文件只需要用crontab -e命令即可。注意,普通用户一般没有权限访问/var/spool/cron

    相关命令:1)查看,crontab -l ;2)新增,crontab -e;3)删除,crontab -r

  2. /etc/crontab 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab。

  3. /etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。

  4. cron.deny 与 cron.allow文件

    /etc/cron.deny 表示不能使用crontab 命令的用户

    /etc/cron.allow 表示能使用crontab的用户。

    默认情况下,cron.allow文件不存在。如果两个文件同时存在,那么/etc/cron.allow 优先。如果两个文件都不存在,那么只有超级用户可以安排作业。

三. 文件/etc/crontab中每行任务的描述格式如下:

   在crontab文件中如何输入需要执行的命令和时间。该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。
     每个域之间使用空格或者制表符分隔。格式如下:

 minute hour day-of-month month-of-year day-of-week commands 
   合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday) commands(代表要执行的脚本)

  minute: 表示分钟,可以是从0到59之间的任何整数。

  hour:表示小时,可以是从0到23之间的任何整数。

  day:表示日期,可以是从1到31之间的任何整数。

  month:表示月份,可以是从1到12之间的任何整数。

  week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

  command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符:

星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

  一些例子:

每天早上6点 
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。

每两个小时 
0 */2 * * * echo "Have a break now." >> /tmp/test.txt  

晚上11点到早上8点之间每两个小时和早上八点 
0 23-7/28 * * * echo "Have a good dream" >> /tmp/test.txt

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 
0 11 4 * 1-3 command line

1月1日早上4点 
0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 HOME=/ 

每小时执行/etc/cron.hourly内的脚本
01 * * * * root run-parts /etc/cron.hourly
每天执行/etc/cron.daily内的脚本
02 4 * * * root run-parts /etc/cron.daily 

每星期执行/etc/cron.weekly内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly 

每月去执行/etc/cron.monthly内的脚本 
42 4 1 * * root run-parts /etc/cron.monthly 

注意: "run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。

四. crontab服务

安装crontab:

yum install crontabs

服务操作说明:

/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置

/sbin/service crond status //启动服务


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

ntsysv

加入开机自动启动:

chkconfig –level 35 crond on

四. crontab命令

  参考man手册,help等

【参考原文1】:http://blog.csdn.net/hi_kevin/article/details/8983746

【参考原文2】:http://www.cnblogs.com/intval/p/5763929.html

原文地址:https://www.cnblogs.com/yingsong/p/6737728.html