zoukankan      html  css  js  c++  java
  • linux备忘录-例行性工作排程 (crontab)

    例行性工作排程

    例行性工作排程分为两类

    1. at

    at是只执行一次就结束的指令安排。要想使用at,必须要有atd服务的支持。

    1. crontab

    crontab是每隔一段时间自动执行的指令安排。crontab除了可以使用指令执行外,也可以编辑/etc/crontab来支持。让cron生效的服务支持为crond服务。

    Linux上常见的例行性工作安排

    Linux常会帮我们自动完成一些工作,例如在线更新(on-line update),自动地进行updatedb(locate的文件名数据库),自动作登录档分析。什么是登录档呢,就是Linux会把我们系统内发生的各种信息记录下来,该记录的档案就是登录档。

    1. 登录档轮替(log rotate)

    Linux会帮我们完成登录档的轮替,即让旧的记录数据和新的记录数据分开存放,同时保持登录档的大小不要太大。

    1. 登录文件分析(logwatch)

    系统还会帮我们进行登录文件的分析,该文件的分析可以通过程序logwatch完成。

    1. 建立locate数据库

    文件名数据库放置在/var/lib/mlocate/中,系统会帮我们调用updatedb进行更新

    1. 建立whatis数据库
    2. RPM软件登录文件的建立
    3. 移除暂存档

    系统会自动调用tmpwatch指令删除暂存档

    1. 与网络服务有关的分析行为

    系统自动分析软件的登录文件等。

    仅执行一次的工作排程 at

    atd服务的启动与开机自启动

    # 启动atd服务
    /etc/init.d/atd restart
    
    # 设置atd服务开机自启动
    chkconfig atd on
    

    at的工作方式

    需要将at的工作安排以文本的形式写到/var/spool/at/目录内,然后就等atd服务取用与执行吧。

    可以通过 /etc/at.deny/etc/at.allow 这两个配置文件设置at的使用限制(一个账号写一行)

    只有在/etc/at.allow中的使用者才能使用at
    如果没有档案/etc/at.allow,会查看/etc/at.deny,在该档案内的使用者不能使用at
    如果两个档案都不存在,那么只有root用户才能使用at

    可以通过at命令设置at排程。batch设置系统有空时才进行at任务。atq查询at排程。atrm删除at任务。

    循环执行的工作排程 cron

    通过指令crontab进行控制,工作排程会记录到/var/spool/cron/username目录内。cron执行的每一项工作都会记录到/var/log/cron登录档中

    与at相同,可以通过 /etc/cron.allow/etc/cron.deny 这两个配置文件设置crontab的使用限制(一个账号写一行)

    只有在/etc/cron.allow中的使用者才能使用crontab
    如果没有档案/etc/cron.allow,会查看/etc/cron.deny,在该档案内的使用者不能使用crontab
    如果两个档案都不存在,那么只有root用户才能使用crontab

    可以通过命令crontab设置循环执行的工作排程。

    crontab的档案格式

    分钟    小时    日期    月份    周    指令
    0       12      *       *      *    mail username -s "at 12:00" < /home/username/.bashrc
    
    # 分钟 0~59
    # 小时 0~23
    # 日期 1~31
    # 月份 1~12
    # 周 0~7,0和7都代表星期天
    # ---- 特殊字符 ----
    # * 星号,任何时刻都接受
    # , 逗号,代表或的意思
    # - 减号,表示时间范围 如 8-20
    # */n ,表示每隔n单位间隔,也可以0-59/5
    
    # 例子:5月1日发23点59分 发邮件给kiki
    59  23  1  5  *  mail kiki < /home/username/lover.txt
    
    # 例子:每5分钟执行一遍 /home/username/test.sh
    */5  *  *  *  *  /home/username/test.sh
    
    # 最好使用绝对路径
    

    crontab 系统配置文件 /etc/crontab

    /etc/crontab 是系统的的例行性排程。而通过命令crontab -e进行编辑的是用户的例行性排程。

    在linux下,系统会自动地每分钟读取一遍/etc/crontab。但在其他一些unix系统中,系统会把/etc/crontab读进内存中,因此在别的系统中,每次修改完/etc/crontab,可能就需要重新启动crond服务/etc/init.d/crond restart

    /etc/crontab的内容如下所示

    SHELL=/bin/bash    #使用哪种shell接口
    PATH=/sbin:/bin:/usr/sbin:/usr/bin    #执行程序搜索路径
    MAILTO=root   #若有stdout或stderr,会通过mail将数据送给它
    HOME=/    #默认此shell的家目录
    # run-parts
    # 分 时 日 月 周 执行者身份  指令串 
    01  *  *  *  *  root  run-parts /etc/cron.hourly  #每小时
    02  4  *  *  *  root  run-parts /etc/cron.daily   #每天
    22  4  *  *  0  root  run-parts /etc/cron.weekly   #每周日
    42  4  1  *  *  root  run-parts /etc/cron.monthly   #每个月1号
    
    # root 是执行者的身份
    # run-parts是一个bash脚本,会将目录下的指令抓出来执行
    

    crontab注意事项

    1. 注意排程的时间分流,不要挤在一个时间执行
    2. 取消不要的输出项目,数据重导向到/dev/null
    3. 可以检查/var/log/cron,观察是否有非自己设定的cron在执行
    4. 周和日月不能同时存在

    可唤醒停机期间的工作任务 anacron

    anacron执行的时间一般有两个

    1. 系统开机期间
    2. 写入crontab的排程中

    anacron是一只程序,并已经写到crontab的排程中。

    /etc/anacrontab的内容

    SHELL=/bin/sh
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    
    #天数  延迟分钟数   job名称   指令串
    1      65        cron.daily    run-parts /etc/cron.daily
    7      70        cron.weekly   run-parts /etc/cron.weekly
    30     75        cron.monthly  run-parts /etc/cron.monthly
    
    # anacron的时间记录文件为
    # /var/spool/anacron/cron.daily
    # /var/spool/anacron/cron.weekly
    # /var/spool/anacron/cron.monthly
    

    执行过程

    若下达 anacron -s cron.daily ,其过程为

    1. 由/etc/anacrontab分析cron.daily这项工作的天数为1天
    2. 由/var/spool/anacron/cron.daily取出最近一次执行anacron的时间戳
    3. 由上个步骤和目前的时间进行比较,若差异天数为1天以上包括一天,则准备执行指令
    4. 根据/etc/anacrontab的设定,延迟65分钟
    5. 延迟时间过后,开始执行指令,即run-parts /etc/cron.daily
    6. 执行完毕后,anacron程序结束

    查看 anacron 是否开机时主动执行

    chkconfig --list anacron
    # 通过查看run level为3和5的情况
    # 若为on则开机主动执行
    

    命令

    1. at (单一工作排程)
    at [-mldv] TIME
    at -c 工作号码
    # 选项与参数
    # -m 工作完成后,以email形式通知工作者工作完成了
    # -l at -l相当于atq,列出系统上所有该用户的at排程
    # -d at -d相当于atrm,取消一个at排程中的工作
    # -v 使用较明显的格式显示
    # -c 列出该项工作的实际指令内容
    # TIME 指定at工作的时间
    # TIME 格式
    # HH:MM 例如 04:00
    # HH:MM YYYY-mm-dd 例如 04:00 2018-01-01
    # HH:MM[am|pm] [Month] [Date]  例如 04:00pm March 17
    # HH:MM[am|pm] + number[minutes|hours|days|weeks] 例如 now + 5 minutes 或者 04pm + 3 days
    
    # 5分钟后将/root/.bashrc发邮件给root自己
    at now + 5 minutes
    at> /bin/mail root -s "test at" < /root/.bashrc
    at> <EOT>   #通过按Ctrl+D结束输入
    
    # 列出第4项的内容
    at -c 4
    
    # 最好使用绝对路径
    # stdout/stderr会转到执行者的mailbox
    # 改用 echo "hello" > /dev/tty1
    
    1. atq (查询at排程)
    2. atrm (移除at排程)
    # 根据job id移除at排程
    atrm jobId
    
    1. batch (系统有空时才进行at任务)

    batch用法和at相同,只是在系统CPU工作负载小于0.8时才会进行工作任务。

    1. crontab (设置循环性工作排程)
    crontab [-u username] [-l|-e|-r]
    # 选项和参数
    # -u 只有root才能执行这个任务,帮其他使用者建立和删除crontab工作排程
    # -e 编辑crontab的内容
    # -l 查阅crontab的内容
    # -r 移除所有的crontab工作内容
    
    # 让 username 用户每天12:00发信给自己
    # 0 12 * * * mail username -s "at 12:00" < /home/username/.bashrc
    
    # 设置cron排程
    crontab -e
    # 查看cron排程
    crontab -l
    # 移除所有cron排程,如果只需要移除一个排程,需要crontab -e进行编辑
    crontab -r 
    
    1. anacron (可唤醒停机期间的工作任务)
    anacron [-sfn] [job]
    anacron -u job
    # 参数和选项
    # -s 开始连续执行各项job,并根据时间记录文件判断是否进行
    # -f 强制进行,并不会去判断时间记录文件
    # -n 立刻进行为执行的任务,而不延迟
    # -u 仅更新时间记录文件,不进行任何工作
    # job 由/etc/anacrontab定义的各项工作名称
    

    参考

    鸟哥的Linux私房菜 第三版

  • 相关阅读:
    linux常用命令的英文单词缩写
    Servlet Struts2 SpringMVC 获取参数与导出数据 方法比较
    Spring 整合Mybatis Mapper动态代理方法
    Spring 整合Mybatis dao原始方法
    Mybatis Mapper动态代理方式 typeAliases 别名的使用
    MySQL 高性能优化实战总结
    Chrome 浏览器最牛插件之一 Vimium
    Spring Cloud-微服务架构集大成者
    单点登录原理与简单实现
    Spring-WebSocket 教程
  • 原文地址:https://www.cnblogs.com/smallpi/p/7366529.html
Copyright © 2011-2022 走看看