zoukankan      html  css  js  c++  java
  • Linux计划任务管理

    Linux计划任务管理

    Linux系统下的计划任务大致分为两类:

    一、单次计划任务

    单次计划任务按执行方式不同又分为以下2种:

    1、at:指定时间点,执行一次性任务,用法如下

    at 命令:at [option] TIME
    
    常用选项:
    -V 显示版本信息
    -t time 时间格式 [[CC]YY]MMDDhhmm[.ss]
    -l 列出指定队列中等待运行的作业;相当于atq
    -d 删除指定的作业;相当于atrm
    -c 查看具体作业任务,后面跟任务队列中的任务编号ID
    -f /path/file 指定的文件中读取任务
    -m 当任务被完成之后,将给用户发送邮件,即使没有标准输出
    
    TIME:定义具体执行at这项任务的时间点,TIME格式如下:
    HH:MM [YYYY-mm-dd]
    noon, midnight, teatime(4pm)
    tomorrow
    now+#{minutes,hours,days, OR weeks}
    
    TIME时间格式举例如下:
    HH:MM 02:00
    在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务
    HH:MM YYYY-MM-DD 02:00 2016-09-20
    
    规定在某年某月的某一天的特殊时刻进行该项任务
    HH:MM[am|pm] [Month] [Date]
    04pm March 17
    17:20 tomorrow
    
    在某个时间点再加几个时间后才进行该项任务
    HH:MM[am|pm] + number [minutes|hours|days|weeks]
    now + 5 min
    02pm + 3 days
    

    at任务的创建方式有如下几种:

    1)交互式        #输入at命令与系统交互式创建
    2)输入重定向    #采用管道符"|" 或者"<" 输入重定向创建 
    3)at -f 文件   #使用-f选项后面跟指定的文件的方式来创建
    

    举例:创建定时任务,今天18:00自动关机

    [root@centos7 ~]#at 18:00 
    at> shutdown -p
    at> <EOT>             #按Ctrl+D键正常结束输入
    job 4 at Thu Aug 22 18:00:00 2019
    
    查看创建的at任务列表
    [root@centos7 ~]#at -l      #或者使用atq命令
    4	Thu Aug 22 18:00:00 2019 a root
    [root@centos7 ~]#
    
    查看指定任务的具体信息
    [root@centos7 ~]#at -c 4    #4为指定任务的编号ID
    
    
    删除at任务
    [root@centos7 ~]#at -d 4
    或者
    [root@centos7 ~]#atrm 4
    
    

    2、batch:系统自行选择空闲时间去执行此处指定的任务 (此类计划任务由于执行时间不确定,所以使用相对较少)

    举例:创建任务,在系统空闲的时候,自动将/data目录下的f1.log压缩

    [root@centos7 ~]#batch 
    at> gzip /data/f1.log
    at> <EOT>    #Ctrl+D 正常退出完成任务输入
    

    用户创建at任务的权限管理控制

    ./etc/at.{allow,deny}控制用户是否能执行at任务
    
    白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令
    
    黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在at.deny 文件中的使用者则可执行
    
    如果两个文件都不存在,则只有 root 可以执行 at 命令
    

    at与batch命令创建的计划任务默认存放在 /var/spool/at 目录下

    注意:at与batch命令依赖atd服务,需确保系统atd服务处于运行状态

    查看atd服务是否启动

    centos7系统:
    [root@centos7 ~]#systemctl status atd.service 
    
    centos6系统:
    [root@centos6 ~]#/etc/init.d/atd status
    
    

    二、周期性计划任务cron

    cron任务依赖系统crond服务,使用cron任务需要确保系统crond服务处于启动运行状态。

    查看crond服务运行状态:

    centos7系统:
    [root@centos7 ~]#systemctl status crond.service 
    
    centos6系统
    [root@centos6 ~]#/etc/init.d/crond status
    

    cron任务的具体使用方法

    1、创建系统计划任务

    修改以下相关配置文件,或将需要添加计划任务的脚本放入到以下对应的目录中
    /etc/crontab 配置文件
    /etc/cron.d/ 配置文件
    /etc/cron.hourly/ 脚本
    /etc/cron.daily/ 脚本
    /etc/cron.weekly/ 脚本
    /etc/cron.monthly/ 脚本
    

    2、通过corntab命令创建用户自定义的计划任务

    crontab命令相关用法如下:

    crontab命令:
    crontab [-u user] [-l | -r | -e] [-i]
    -l 列出所有任务
    -e 编辑任务
    -r 移除所有任务
    -i 同-r一同使用,以交互式模式移除指定任务
    -u user 仅root可运行,指定用户管理cron任务
    
    控制用户执行计划任务权限(通过设置黑白名单):
    /etc/cron.{allow,deny}
    

    cron任务创建后,任务队列存放在每个用户专用的cron任务目录下 /var/spool/cron/USERNAME

    cron任务的日志文件位于 /var/log/cron

    cron的配置有5个时间(5个*号),分别表示分钟、小时、天、月、周,具体说明如下:

     ┌───────────── 分钟(0 - 59)
     │ ┌───────────── 小时(0 - 23)
     │ │ ┌───────────── 天 (1 - 31)
     │ │ │ ┌───────────── 月 (1 - 12)
     │ │ │ │ ┌───────────── 周几 (0 - 6) (周日到周六,其中周日可以用0或7表示)
     │ │ │ │ │                                    
     │ │ │ │ │
     │ │ │ │ │
     * * * * *  
    

    * 星号   表示任意值
    
    ,逗号    表示多个值,例如  1,2,3 
    
    - 连字符    表示连续的范围,例如3-6,代表3,4,5,6
    
    / 斜线   表示在指定的时间范围上,定义步长,注意,定义的步长的值,对应字段的值需要能整除,例如在分钟字段,*/5,表示每5分钟,对应的执行任务的时刻点为0 5 10 15 20 25 30 35 40 45 50 55,如不能整除则无效,例如分钟字段不能设置为7(因为60不能被7整除)
    
    L    表示最后(last),比如在周那个字段的6L表示某一个月的最后一个周六。
    

    另外还有W # ? H 不常用,此处就不作详细解释了。

    常用的cron表达式举例:

    每小时

    0 * * * *
    

    每2小时

    * */2 * * *
    

    每个月的10号和每个礼拜的礼拜一到礼拜三的早上11点

    0 11 10 * 1-3
    

    每天的下午2点从1分到40分的每分钟

    1-40 14 * * *
    

    每天的早上8点到下午4点,每隔两个小时

    0 8-16/2 * * *
    

    每年3月到6月份,每个月的1号、10号、20号,或者每个月的星期天

    * * 1,10,20 3-6 0
    

    cron任务注意事项:

    1、在同时存在日期字段和星期字段的表达式中,日期和星期在条件匹配上是或者的关系,只要满足其中一个条件,计划任务就会执行,其他字段为并且的关系,需要同时满足才执行。

    2、运行结果的标准输出和错误默认会以邮件通知给相关用户,如不希望产生大量邮件,需要将命令的输出做重定向处理,例如:

    COMMAND &> /dev/null
    

    3、对于cron任务来讲,%有特殊用途;如果在命令中要使用%,则需要转义,将%放置于单引号中,则可不用转义,或者将命令写入脚本文件中。

  • 相关阅读:
    建立一个能持续处理的C/S网络程序
    建立一个可以不停地接收客户端新的连接,但不能处理复杂的业务的C/S网络程序
    归并排序
    堆排序
    计数排序
    不要在PHP7中踩这些坑
    关于生活学习
    topthink/think-swoole 扩展包的使用 之 WebSocket
    PHP 三元运算符
    topthink/think-swoole 扩展包的使用 之 Task
  • 原文地址:https://www.cnblogs.com/eddie1127/p/11394678.html
Copyright © 2011-2022 走看看