• linux学习36 任务计划crontab及企业实战应用


    一、Linux任务计划,周期性任务执行

      1、在未来的某时间点执行一次某任务:at,batch

      2、周期性运行某任务:crontab

        执行结果:会通过邮件发送给用户。这个邮件服务只运行在本机上。

        

      3、在centos567中邮件服务都是默认开启的,默认监听端口为25

          可通过netstat -tnlp 或ss -tnl 查看

    [root@node1 ~]# netstat -tnlp |grep 25
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1075/master         
    tcp6       0      0 ::1:25                  :::*                    LISTEN      1075/master

      4、本地电子邮件服务

        a、smtp:simple mail transmission protocol。简单邮件传输协议,用于发送邮件但是不用来接收邮件。

        b、pop3:Post Office Procotol,邮局协议,3为版本号

          Imap4:Internet Mail Access Procotol 互联网邮件访问协议,4为其版本号

        c、mail命令

          mailx - send and receive Internet mail

          MUA:Mail User Agent,用户收发邮件的工具程序

            mailx [-s 'SUBJECT'(邮件的标题)] username[@hostname]  

            邮件正文的生成

              (1)、交互式输入;.单独成行可以表示正文结束;Ctrl + d提交亦可

              我们现在给centos用户发送一封邮件

    [root@localhost ~]# mail -s 'hello centos' centos  #回车后输入邮件内容
    How are you these days?
    .   #点号表示结束编辑
    EOT

              现在我们切换到用户centos查看邮件

    [root@localhost ~]# su - centos   
    Last login: Sat Feb 22 17:08:13 CST 2020 on pts/0
    [centos@localhost ~]$ mail   #mail命令不带任何内容表示收邮件
    Heirloom Mail version 12.5 7/5/10.  Type ? for help.
    "/var/spool/mail/centos": 1 message 1 new
    >N  1 root                  Sat Feb 22 17:11  18/636   "hello centos" #N表示新邮件,1表示第一封新邮件
    & 1  #按1表示查看第一封邮件
    Message  1:
    From root@localhost.localdomain  Sat Feb 22 17:11:24 2020
    Return-Path: <root@localhost.localdomain>
    X-Original-To: centos
    Delivered-To: centos@localhost.localdomain
    Date: Sat, 22 Feb 2020 17:11:24 +0800
    To: centos@localhost.localdomain
    Subject: hello centos
    User-Agent: Heirloom mailx 12.5 7/5/10
    Content-Type: text/plain; charset=us-ascii
    From: root@localhost.localdomain (root)
    Status: R
    
    How are you these days?  #这是邮件的内容,上面表示邮件相应的标题
    
    & q  #q表示退出    
    Held 1 message in /var/spool/mail/centos
    You have mail in /var/spool/mail/centos

              (2)、通过输入重定向

                现在我们通过centos发送邮件给root,内容为/etc/fstab中的内容

    [centos@localhost ~]$ mail -s 'fstab file' root < /etc/fstab 
    [centos@localhost ~]$ exit
    logout
    You have mail in /var/spool/mail/root
    [root@localhost ~]# mail
    Heirloom Mail version 12.5 7/5/10.  Type ? for help.
    "/var/spool/mail/root": 1 message 1 new
    >N  1 centos@localhost.loc  Sat Feb 22 17:19  28/1071  "fstab file"
    & 1
    Message  1:
    From centos@localhost.localdomain  Sat Feb 22 17:19:57 2020
    Return-Path: <centos@localhost.localdomain>
    X-Original-To: root
    Delivered-To: root@localhost.localdomain
    Date: Sat, 22 Feb 2020 17:19:57 +0800
    To: root@localhost.localdomain
    Subject: fstab file
    User-Agent: Heirloom mailx 12.5 7/5/10
    Content-Type: text/plain; charset=us-ascii
    From: centos@localhost.localdomain
    Status: R
    
    
    #
    # /etc/fstab
    # Created by anaconda on Wed Oct 24 05:18:55 2018
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/centos-root /                       xfs     defaults        0 0
    UUID=7b808363-4f9d-4f63-a543-28928b32c184 /boot                   xfs     defaults        0 0
    /dev/mapper/centos-swap swap                    swap    defaults        0 0

              (3)、通过管道。我们也可通过管道进行邮件发送

    [root@localhost ~]# cat /etc/fstab | mail -s 'to you' centos 
    You have mail in /var/spool/mail/root

    二、周期性任务执行

      1、at [OPTION]... TIME

        a、TIME:

          (1)、HH:MM [YYYY-mm-dd]

          (2)、noon(中午,即中午十二点),midnight(午夜,即晚上十二点),teatime(午茶时间,即下午四点),tomorrow(即明天)

          (3)、now+ #

            UNIT:minutes,hours,days,OR weeks

            现在我们定义二分钟以后运行ls /var命令

    [root@localhost ~]# at now+2min
    at> ls /var
    at> <EOT>   #使用ctrl + d提交
    job 2 at Sat Feb 22 17:35:00 2020
    [root@localhost ~]# at -l  #查看at任务
    2    Sat Feb 22 17:35:00 2020 a root  

        b、at的作业队列,用单个字母表示,默认都使用a队列

        c、常用选项

          -l:查看作业队列,相当于atq

          -f /PATH/FROM/SOMEFILE:从指定文件中读取作业任务而不是交互式输入

    [root@localhost application]# cat at.tasks 
    cat /etc/inittab
    echo "hello at command"
    [root@localhost application]# at -f /application/at.tasks now+5min
    job 3 at Sat Feb 22 17:46:00 2020
    [root@localhost application]# atq
    3    Sat Feb 22 17:46:00 2020 a root

          -d:删除指定的作业,相当于atrm

    [root@localhost application]# atq
    3    Sat Feb 22 17:46:00 2020 a root
    [root@localhost application]# at -d 3
    [root@localhost application]# atq

          -c:查看指定作业的具体内容

          -q QUEUE:指明队列;

        d、注意:作业执行结果是以邮件发送给提交作业的用户

      2、batch命令

        batch会让系统自行选择在系统资源较空闲的时间去执行指明的任务;

      3、周期性任务计划:cron

        a、服务程序:

          cronle:主程序包,提供了crond守护进程及相关辅助工具;

        b、确保crond守护进程(daemon)处于运行状态。

          (1)、centos7查看方式

    [root@localhost application]# systemctl status crond.service 
    ● crond.service - Command Scheduler
       Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
       Active: active (running) since Sat 2020-02-22 17:06:27 CST; 51min ago
     Main PID: 706 (crond)
       CGroup: /system.slice/crond.service
               └─706 /usr/sbin/crond -n
    
    Feb 22 17:06:27 localhost.localdomain systemd[1]: Started Command Scheduler.
    Feb 22 17:06:27 localhost.localdomain systemd[1]: Starting Command Scheduler...
    Feb 22 17:06:27 localhost.localdomain crond[706]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 18% if used.)
    Feb 22 17:06:27 localhost.localdomain crond[706]: (CRON) INFO (running with inotify support)
    You have new mail in /var/spool/mail/root

          (2)、centos6 查看方式:service crond status

              

         c、向crond提交作业的方式不同于at,它需要使用专用的配置文件,此文件有固定格式,不建议使用文本编辑器直接编辑此文件,要使用crontab命令

        d、cron任务分为两类

          (1)、系统cron任务:主要用于实现系统自身的维护;

            手动编辑:/etc/crontab文件

            系统cron的配置格式:

    [root@localhost application]# cat /etc/crontab 
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root #邮件发给的用户
    
    # For details see man 4 crontabs  #可以通过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

            注意:

              1)、每一行定义一个周期性任务,共7个字段

                * * * * * :定义周期性时间

                user-name:运行任务的用户身份

                command to be executed:任务

              2)、此处的环境变量不同于用户登陆后获取的环境变量,因此,建议命令使用绝对路径,或者自定义PATH环境变量

              3)、执行结果邮件发送给MAILTO指定的用户

          (2)、用户cron任务:

            命令:crontab命令

            也可手动编辑文件:/var/spool/cron/USERNAME

            注意:

              1)、每一行定义一个周期性任务,共6个字段

                * * * * * :定义周期性时间

                command to be executed:任务

              2)、此处的环境变量不同于用户登陆后获取的环境变量,因此,建议命令使用绝对路径,或者自定义PATH环境变量

              3)、执行结果邮件发送给当前用户

        e、时间表示法

          (1)、特定值:

            给定时间点有效取值范围内的值;

              注意:day of week和 day of month 一般不同时使用;

          (2)、*

            给定时间点上有效取值范围内的所有值:表示“每...”

              1)、每月每周每天每小时的每三分钟执行一次,即每小时的第三分钟

                3 * * * *    :每小时执行一次;每小时的第三分钟

              2)、每周五的四点三分执行一次:表示每周五的四点三分

                3 4 * * 5  :每周执行一次;每周5的4点3分

              3)、每月的七号的六点五分执行一次

                5 6 7 * *    :每月执行一次;每月的7号的6点5分

              4)、每年的十月九号八点七分执行一次

                7 8 9 10 *   :每年执行一次;每年的10月9号8点7分

          (3)、离散取值:, 

            在时间点上使用逗号分隔的多个值:#,#,#

              1)、每周三和周日的八点九分执行一次

                9 8 * * 3,7 :每周三和周日

              2)、每周三和周日的8点和20点各执行一次

                0 8,20 * * 3,7 :每周三和周日的8点和20点各执行一次。分钟的位置不能用*,如果用了就表示8点和20点的每分钟。

          (4)、连续取值:-

            在时间点上使用 - 连接开头和结束:#-#

              1)、周一到周五的每天的9点到18点执行一次

                0 9-18 * * 1-5 :工作时间内的每小时

          (5)、在指定时间点上,定义步长:/#,#即步长

              1)、每5分钟执行一次某任务

                */5 * * * * 

              2)、每7分钟执行一次某任务

                注意:

                  i:指定的时间点不能被步长整除时,其意义将不复存在

                  ii:对crontab来说最小时间单位为“分钟”,想完成“秒级任务”,得需要额外借助其它机制;定义成每分钟任务,而在利用脚本实现在每分钟之内循环执行多次。

      4、crontab命令

        crontab [-u user] [-l | -r | -e] [-i] [-s]

        a、相应选项

          -e:编辑任务

          -l:列出所有任务

          -r:移除所有任务:即删除/var/spool/cron/USERNAME文件

          -i:在使用-r选项移除所有任务时提示用户确认

          -u user:root 用户可为指定用户管理cron任务

    [root@localhost /]# crontab -u centos -e
    no crontab for centos - using an empty one
    crontab: installing new crontab
    You have new mail in /var/spool/mail/root
    [root@localhost /]# cat /var/spool/cron/centos 
    * * * * * /bin/echo "wohaoshuai"
    [root@localhost /]# crontab -u centos -l
    * * * * * /bin/echo "wohaoshuai"

        b、注意:运行结果以邮件通知给当前用户;如果拒绝接收邮件

          (1)、COMMAND > /dev/null  #将正确输出传送至/dev/null

          (2)、COMMAND &> /dev/null  #将所有的输出传送至/dev/null

        c、定义COMMAND时,如果命令中需要用到%,需要对其转义;但放置于单引号中的%不用转义亦可

        d、思考:某任务在指定的时间因关机未能执行,下次开机会不会自动执行?

          不会!

          如果期望某时间因故未能按时执行,下次开机后无论是否到了相应时间点都要执行一次,可使用anacron实现。

        课外作业: anacron及其应用

      5、练习:

        a、每12小时备份一次/etc目录至/backups目录中,保存文件名称格式为“etc-yyyy-mm-dd-hh.tar.xz”

        b、每周2、4、7备份/var/log/secure 文件至/logs目录中,文件名格式为“secure-yyyymmdd”

        c、每两小时取出当前系统/proc/meminfo文件中S或M开头的行信息追加至/tmp/meminfo.txt文件中

  • 相关阅读:
    8月15日
    【k8s】创建 tls 类型 Secret
    使用 openssl 生成 CA 证书
    【k8s】跨 Namespace 使用 Ingress
    Windows 和 Centos 导入 CA 证书
    使用 openssl 生成服务器证书
    【k8s】nginx ingress 配置 https
    【k8s】通过 https 访问 dashboard
    1012day人口普查系统
    8.3日志
  • 原文地址:https://www.cnblogs.com/Presley-lpc/p/12252879.html
Copyright © 2020-2023  润新知