• 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

  • 相关阅读:
    堆排序的应用优先级队列
    php基础语法知识笔记(二)
    XP系统下用虚拟机安装centos 5.6(Linux系统)图文教程(一)—“快速安装”
    linux系统启动服务解释与优化(centos 5版本)
    XP系统下用虚拟机安装centos 5.6(Linux系统)图文教程(二)—“linux优化配置”
    php基础语法知识笔记(一)
    asp.net SQLite数据库操作类,
    SilverLight 相关资源网址 (更新中。。。)
    SPQuery查询语法简要说明
    asp.net SQLite数据库操作Demo
  • 原文地址:https://www.cnblogs.com/yingsong/p/6737728.html
Copyright © 2020-2023  润新知