• Linux 命令大全(十六)——计划任务


    十六、计划任务
      在很多时候为了自动化管理系统,都会用到计划任务,比如关机,管理,备份之类的操作,都可以使用计划任务来完成,这样可以是管理员的工作量大大降低,而且可靠度更好。
      linux 系统支持一些能够自动执行任务的服务,称为计划任务。
    LINUX 有如下三种计划任务:
    • at:指定一个时间执行一个任务 (适用一个或多个任务,执行一次后就不用)
    • cron:根据一个时间表自动执行任务 (使用一个或多个任务,周期性执行)
    • 系统级别的计划任务及其扩展anacron:在一个指定时间间隔错过后自动执行任务

    at:

      安排一个任务在未来执行,需要一个atd的系统后台进程检查 atd 进程是否启动
    service atd status
    # atd (pid 2274) 正在运行...
    
    
    chkconfig |grep atd
    # atd
    # 0:关闭 1:关闭 2:关闭 3:启用 4:启用 5:启用 6:关闭
    
    # 如果未启动,可以使用如下命令:
    service atd start
    # 正在启动 atd: [确定]
    
    chkconfig atd on
    常用指令
    at:安排延时任务
    具体使用方法:
    例 1:
    at now+2 minutes 回车
    # >输入要执行的命令>ctrl+d 结束输入
    
    
    at now+2 minutes
    at> wall Aixi
    at> <EOT>
    # job 2 at 2010-06-18 16:36
    # <EOT>是 ctrl+d 中断输入,这个命令意思是发送一个广播内容是 Hello Aixi.具体时间可以改,单位可以改,可以用 hours,months,years,weeks 等.
    例 2 跟具体时间
     at 16:39 dec 10
    at> Hello Aixi
    at> <EOT> ctrl+d 结束输入
    # job 3 at 2010-12-10 16:39
    # 意思是在今年的 12 月 10 日 16:39 运行这个命令.如果不加月和日,默认就是今天.

    Atq——查询当前的等待任务用 atq 来查询,已经运行的任务,就消失了。这就是 at 计划任务的重点,只运行一次
    atrm——删除等待任务,启动计划任务后,如果不想启动设定好的计划任务可以使用 atrm 命令删除。格式:atrm 任务号(命令后面跟计划任务编号,如果不跟,就会删除这个用户所有的计划任务。)

    例 3
    atrm 10 # 删除计划任务 10
    atq # 查看计划任务是否删除
      at 将要运行的命令以文本形式写入/var/spool/at/目录内,等待 atd 服务的取用和执行。
      还可以进入到/var/spool/at 目录里把计划任务删除,计划任务的文件都保存在该目录里,可以用 rm -f
      文件名来删除(以文件的形式删除计划任务,因为计划任务是以文件形式保存在该目录中)
     

    cron服务

      (参考网址:http://www.linuxsir.org/main/?q=node/209)
      相对与 at,cron 的优点就是能够周期性的执行某个命令,at 却只能执行一次,cron 的后台进程名字是 crond ,cron 也是 system V 的服务,所以我们可以 service crond start|stop 来启动和关闭此服务,也可以使用 chkconfig 或者 ntsysv 来选择 cron 服务的默认开启。
    命令:
    crontab -e  # 编辑当前用户的 cron 表
    crontab -l   # 查看当前用户的 cron 表
    crontab -r   # 删除当前用户的 cron 进程
    crontab -u  # 用户名 以某用户的身份来控制 cron 表
    还有个重要的知识点,当用户的计划任务建立后是存放在 var/spool/cron 这个目录
     
      当使用 crontab -e 编辑当前用户的 cron 表后,会出现一个 vi 文件,cron 的格式是这样的。分成两列,左边是时间,右边是运行的命令。时间是由 5 个部分组成。
    例:
    # 每分每小时每天每月每周广播 hello everyone
    * * * * * wall hello everyone
    # 5 个星号分别代表:minute hour day-of-month month-of-year day-of-week ,而 wall hello everyone 这是命令内容。如果要每两分钟发送就用*/2 代替第一个*。也可以是用具体时间来表示。
    
    # 使用 crontab -e 编辑当前用户的 cron 表
    '''
    这里的 5 个星号就代表的时间和日期:
    第一个*星号代表个小时的第几分钟:minute 范围是从 0-59
    第二个*星号代表每天的第几个小时:hour 范围是从 0-23
    第三个*星号代表每月的第几个日:day-of-month 范围从 1-31
    第四个*星号代表没年的第几个月:month-of-year 范围从 1-12
    第五个*星号代表每周的星期几:day-of-week 范围从 0-6,其中 0 表示星期日
    用户名:也就是执行程序要通过哪个用户来执行,这个一般可以省略;
    '''
    命令:执行的命令和参数。
    时程表的格式如下 :
    • f1 f2 f3 f4 f5 program
    • f1 是表示分钟,
      • 为 * 时表示每分钟都要执行 program, 
      • 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行
      • 为 */n 时表示每 n 分钟个时间间隔执行一次
      • 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行
    • f2 表示小时, 
      • 为 * 时表示每小时都要执行程序,其余以此类推, 
      • 为 a-b 时表示从第 a 到第 b小时都要执行,其余以此类推
      • 为 */n 表示每 n 小时个时间间隔执行一次,其余以此类推
      • 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其余以此类推
    • f3 表示一个月份中的第几日
    • f4 表示月份
    • f5 表示一个星期中的第几天
    • program 表 示要执行的程序。
     
    使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。
     
     
    例:
    # 1. 9 月 10 日 25 分执行 ls var/spool/cron 任务
    25 * 10 9 * ls var/spool/cron
    
    # 2. 每周日,每分钟执行 wall Hello redking.blog.51cto.com 这个命令
    */1 * * * 0 wall Hello redking.blog.51cto.com
    
    # */ 表示每多少分钟执行一次
    
    # 3. 每晚的 21:30 重启 apache。
    30 21 * * * /usr/local/etc/rc.d/lighttpd restart
    
    # 4. 每月 1、10、22 日的 4 : 45 重启 apache
    45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
    
    # 5. 每周六、周日的 1 : 10 重启 apache
    10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
    
    
    # 6. 在每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 apache
    0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
    
    # 7. 每一小时重启 apache
    * */1 * * * /usr/local/etc/rc.d/lighttpd restart
    
    # 8. 晚上 11 点到早上 7 点之间,每隔一小时重启 apache
    * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
    
    # 9. 每月的 4 号与每周一到周三的 11 点重启 apache
    0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
    
    # 10. 一月一号的 4 点重启 apache
    0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
    
    # 11. 在 12 月内, 每天的早上 6 点到 12 点中,每隔 3 个小时执行一次 /usr/bin/backup
    0 6-12/3 * 12 * /usr/bin/backup
    
    # 12. 每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
    20 0-23/2 * * * echo "haha"

    系统级别的计划任务及其扩展anacrontab

      这个是系统设置好了,清理系统垃圾或者是自动执行某些脚本的系统任务,一般我们做了解就行了,不要更改配置文件是/etc/conrtab
    • SHELL:就是运行计划任务的解释器,默认是 bash
    • PATH:执行命令的环境变量
    • MAILTO:计划任务的出发者用户
    • HOME:家目录为/
    • run-parts 是一个脚本,在/usr/bin/run-parts,作用是执行一个目录下的所有脚本/程序。
    • run-parts /etc/cron.hourly 执行目录/etc/cron.hourly/之下的所有脚本/程序.
    • run-parts 下面就是运行的命令
    • vim /etc/crontab 与 crontab -e 写入的定时运行的区别?
    • vim /etc/crontab:是系统级别定义的 crontab,/etc/crontab 的所有者和组都是 root
    • crontab -e :是用户自定义的 crontab,是所有的用户都可以写入的 两种方法记录的位置不一样,一个在/etc/ 另一个在/var/ 里面。都被 cron 服务调用
    如果系统在以上说的时间没有开机怎么办?那么这个脚本不就是不能执行了?设计者早就想到了这个问题,所以就有了 cron 服务的扩展,目的就是为了防止非 24 小时开机的计算机遗漏的守护任务,anacrontab 就是系统计划任务的扩展文件:在一个指定时间间隔错过后自动执行任务
    格式是这样的:
    • period delay job-identifier command
    • period — 命令执行的频率(天数)
    • delay — 延迟时间(分钟)
    • job-identifier — 任务的描述,用在 anacron 的消息中,并作为作业时间戳文件的名称,只能包括非空白的字符(除斜线外)。
    • command — 要执行的命令
     

    相关知识点链接

     
              
  • 相关阅读:
    SD卡的控制方法(指令集和控制时序)
    MDK的优化应用(转)
    SD卡的SPI模式的初始化顺序(转)
    SD卡读写扇区注意事项(转)
    MDK下调试时提示AXF文件无法导入的解决方法(转)
    把一个 int 数字 n 格式化成16进制的字符串(前面补零成0位)
    DB9 公头母头引脚定义及连接、封装
    RS232 DB9 公头 母头 串口引脚定义
    Codeforces 91C Ski Base 加边求欧拉回路数量
    Cocos Code IDE + Lua初次使用FastTiledMap的坑
  • 原文地址:https://www.cnblogs.com/zhuminghui/p/13594922.html
Copyright © 2020-2023  润新知