运维大世界我爱编程

第13章 计划任务

2018-04-17  本文已影响10人  fe8478c7ba2a
简介
    作用: 计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据

              Schedule one-time tasks with at. 一次性调度执行 at
              Schedule recurring jobs with cron. 循环调度执行 cron
              Schedule recurring system jobs.

所有计划任务执行中的输出都会以邮件的方式发送给指定用户, 除非重定向

一次性调度执行 at 
    程序安装
        在系统光盘中。
              rpm -ivh at.x86_64        //安装
              systemctl start atd       //启动
              systemctl status atd      //查看
               Active: active (running) //运行。inactive是不活跃就是没有运行。

语法格式

        语法格式:
              at <TIMESPEC>
              now +5min
              teatime tomorrow (teatime is 16:00)
              noon +4 days
              5pm august 3 2018 


     at命令格式
              at HH:MM YYYY-MM-DD //HH(小时):MM(分钟) YYYY(年)-MM(月份)-DD(日)
              例:at 4:00 2017-11-27
              HH[am pm]+D(天) days //HH(小时)[am(上午)pm(下午)]+days(天)
              例:4pm + 3days :3天以后下午4:00执行at命令设定的计划任务。
    例1
        初识一次性任务计划
        例1:
              [root@localhost ~]# at  now   +1min
              at> useradd uuuu 
              at> <EOT>   //CTRL+D提交任务
              job 1 at Sat Mar 21 22:34:00 2015
              [root@localhost ~]# atq
              3 Thu Mar 30 09:55:00 2017 a root
              稍等片刻。1分钟后。
              [root@localhost ~]# id uuuu

    例2
        通过重定向,一次性导入多个任务
        例2:
              [root@localhost ~]# vim at.jobs 
              useradd u99
              useradd u00
              touch /`date +%F`.txt
              [root@localhost ~]# at now +1min < at.jobs

注: sudo执行需要考虑tty问题

循环调度执行 cron
    简介
        crond的概念和crontab是不可分割的。crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语chronos(χρόνος),原意是时间。而crond正是它的守护进程。
        查看进程状态
            [root@tianyun ~]# systemctl status crond.service
              [root@tianyun ~]# ps aux |grep crond
              root 550 0.0 0.0 126300 1648 ? Ss 10:05 0:00 /usr/sbin/crond -n
    用户级
        计划任务存储位置:
            [root@localhost ~]# ls /var/spool/cron/
        管理方式:
            创建计划
                crontab -e Edit jobs for the current user. 
            查询计划
                crontab -l List the jobs for the current user.
                管理员可以使用 -u username, 去管理其他用户的计划任务
            删除计划
                crontab -r Remove all jobs for the current users.
  高级管理
        拒绝用户执行任务计划。
    1.在拒绝文件中添加用户名
                    /etc/cron.deny:
              alice
              jack
    2.通过该用户创建计划任务
                    [alice@localhost ~]$ crontab -e     //提示拒绝用户执行。
              You (alice) are not allowed to use this program (crontab)
              See crontab(1) for more information

语法格式 Job format

            # .---------------- 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
              # | | | | |
              # * * * * * command
    示例1
                */5 * * * * /mysql_back.sh
              0 2 1,4,6 * * /mysql_back.sh
              0 2 5-9 * * /mysql_back.sh

              * * * * * /mysql_back.sh
              0 * * * * /mysql_back.sh
              * * 2 * * /mysql_back.sh

              0 2 * * * /mysql_back.sh
              0 2 14 * * /mysql_back.sh
              0 2 14 2 * /mysql_back.sh
              0 2 * * 5 /mysql_back.sh      //不写月日,仅周生效
              0 2 * 6 5 /mysql_back.sh
              0 2 2 * 5 /mysql_back.sh
              0 2 2 6 5 /mysql_back.sh  //书写月和日,月或日,月日周均生效
   示例2
                00 02 * * * ls //每天2:00整
              00 02 1 * * ls //每月1号2:00整
              00 02 14 2 * ls //每年2月14号2:00整
              00 02 * * 7 ls //每周日2:00整
              00 02 * 6 5 ls //每年6月的周五2:00整  (特殊)
              00 02 14 * 7 ls //每月14号2:00整 或者 每周日2:00整,这两个时间都执行
              00 02 14 2 7 ls //每年2月14号2:00整 或者 每周日2:00整,这两个时间都执行

              00 02 * * * ls //每天2:00整
              * 02 * * * ls //每天2:00中的每一分钟
              * * * * * ls //每分钟执行ls
              * * 14 2 * ls //2月14号的每分钟 1440分钟

              */5 * * * * ls //每隔5分钟
              00 02 1,5,8 * * ls //每月1,5,8号的2:00整
              00 02 1-8 * * ls //每月1到8号的2:00整

系统级

        简介
            系统级任务计划作用:
              1.临时文件的清理 /tmp /var/tmp
              2.系统信息的采集 sar
              3.日志的轮转logrotate
              4.通常不是由用户定义
        定义位置一
            定义位置一:在这里可以定义系统的循环的任务计划。
              [root@localhost ~]# vim /etc/crontab //该文件中默认没有定义任何计划任务
              * * * * * user-name command to be executed
        定义位置二(anacron)
            简介
                以天为单位或者是在启动后立刻进行 anacron 的动作,侦测停机期间应该进行但是并没有进行的 crontab 任务,并运行一遍后自动停止。
            运行周期
                时,天,周,月
            工作原理
                 anacron 会以一小时,一天、七天、一个月为期去侦测系统未进行的 crontab 任务,因此对于某些特殊的使用环境(关机未执行)非常有帮助。
            举例说明
                周末关机了。周一早上开机,anacron就会检查一下没有执行的任务计划,然后关闭。
            示例
                1.找到主程序:/etc/cron.d/
                    定义位置二:与位置1(crontab)功能相同。但这里是另一个循环程序:anacron程序
                    
                2.主程序所调动的程序:/etc/cron.d/0hourly/
                    
                3.主程序所调动的程序是anacron:/etc/cron.hourly/0anacron
                    
                4.调动了anacron程序
                    
                5.anacron程序的机制
                    
                6.观察日志
                    
                        如果没有时间戳,可以通过命令立刻触发该程序更新。
              anacron -u
                7.观察的任务计划汇总日志
                    [root@localhost ~]# tail /var/log/cron
              2017-10-23
              Oct 23 10:08:08 localhost anacron[15881]: Job `cron.daily' locked by another anacron - skipping
              Oct 23 10:08:08 localhost anacron[15881]: Will run job `cron.weekly' in 59 min.
              Oct 23 10:08:08 localhost anacron[15881]: Will run job `cron.monthly' in 79 min.
              Oct 24 10:05:36 localhost anacron[15983]: Updated timestamp for job `cron.daily' to 2017-10-24
              Oct 24 10:05:36 localhost anacron[15983]: Updated timestamp for job `cron.weekly' to 2017-10-24
              Oct 24 10:05:36 localhost anacron[15983]: Updated timestamp for job `cron.monthly' to 2017-10-24
                        通过强制执行的命令,可以立刻出发该程序。
              anacron -f  
                8.总结
                    
                    anacron程序是挽救系统中未及时完成的任务。用户一般不需要使用。
                        注释.anacron程序解析
                            [root@localhost ~]# anacron [-sfn] [job]..
              [root@localhost ~]# anacron -u [job]..
              选项与参数:
              -s  :开始一连续的运行各项工作 (job),会依据时间记录档的数据判断是否进行;
              -f  :强制进行,而不去判断时间记录档的时间戳记;
              -n  :立刻进行未进行的任务,而不延迟 (delay) 等待时间;
              -u  :仅升级时间记录档的时间戳记,不进行任何工作。
              job :由 /etc/anacrontab 定义的各项工作名称。
上一篇 下一篇

猜你喜欢

热点阅读