Linux:单次计划任务at及周期计划任务crontab

单次计划任务 at

at命令:at [option] TIME

  1. 常用选项:

    -V 显示版本信息:
    -l 列出指定队列中等待运行的作业;相当于atq
    -d 删除指定的作业;相当于atrm
    -c 查看具体作业任务
    -f /path/file 指定的文件中读取任务
    -m 当任务被完成之后,将给用户发送邮件,即使没有标准输出
    注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户
    
  2. TIME:定义出什么时候进行 at 这项任务的时间

    02:00 2016-09-20
    04pm March 17
    17:20 tomorrow
    now+5min
    02pm+3days
    02am+1weeks
    
  3. 注意事项

    1. 输入完成ctrl+d退出,不要ctrl+c

    2. 查看/var/spool/at目录生成了一个文件

    3. echo在at中无法在屏幕输出,以邮件方式发送

    4. /etc/at.{allow,deny}控制用户是否能执行at任务

      • 白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令

      • 黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在at.deny 文件中的使用者则可执行

      • 如果两个文件都存在,allow文件优先

      • 如果两个文件都不存在,只有 root 可以执行 at 命令

    5. 需安装包:rpm

      rpm -qi at 查看at包是否安装好
      rpm -ql at 查看包文件列表
      ps aux|grep atd 查看atd是否已经在运行
      
    6. 需同步时间:ntpdate

      ntpdate 172.20.0.1
      

实战举例

  1. 创建任务(/var/spool/at/ 任务所在文件夹)

    • 交互式:

      at 10:15 (直接指定时间)
      at> wall "system will reboot"
      或
      at now+1minutes (现在之后1分钟)
      at> wall "class is over"
      或
      at 2:00 (计划任务日志输出隐藏)
      at> tar cvf etc.tar /etc &> /dev/null
      建议计划任务尽量不要标准输出,以免硬盘慢慢被撑满
      
    • at -t 直接指定时间:

      at -t 201808291030.30 (指定时间用-t)
      
    • 重定向:

      at 2:00 < dev/null
      wall "backup is finished"
      EOF
      计划任务可用多行重定向放在脚本中执行
      
    • 读文件:at -f

      cat atjob.txt |at 3:00
      或
      at -f atjob.txt 3:00 (利用f选项,成功会发送空文件)
      还可以把以下内容写入文本atjob.txt中,直接执行文本 
      `tar cvf etc.tar /etc &> dev/null`
      `wall "backup is finished"`
      
  2. 查看任务

    at -l 查看任务列表等同于atq
    at -c 5 查看5号任务
    ls /etc/var/spool/at
    
  3. 删除任务

    at -d 8 
    或 
    atrm 8
    

周期性计划任务 cron

相关程序包

  1. cronie: 主程序包,提供crond守护进程及相关辅助工具

  2. cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务

  3. crontabs:包含CentOS提供系统维护任务

cronie主程序包

  1. 准备工作

    1) 了解cronie文件

    rmp -ql cronie
    
    /usr/sbin/crond 创建任务用的
    /var/spool/cron 任务存放文件夹
    /etc/cron.deny 黑名单文件
    /etc/crom.d/0hourly 每小时任务文件
    /usr/lib/systemd/system/crond.service 服务守护进程
    /usr/bin/crontab 是提交计划任务用的
    

    3) 开机启动服务

    systemctl is-enabled crond  -centos7
    chkconfig --list crond      -centos6
    

    4) 查看现在是否启动

    systemctl status crond  centos7
    service crond status    centos6
    

    5) 启动一下

    systemctl start crond   centos7
    service crond start     centos6
    

配置文件解析

  1. /etc/crontab 配置文件-定义了将来我们要用的各种计划列

    文件格式:   
         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 excuted
         30   2    *    *    7    root        /root/back.sh
    注:每周日,2点30分,以root身份执行back.sh脚本      
    tar cf /data/etc`date +%F`.tar  /etc/ &> /dev/null (写入back.sh脚本)
    百分号%在文件内有特殊含义,不能这么用,需写在脚本里,直接执行脚本即可。
    日期和星期是或的关系,如希望并且关系需在脚本内判断。
    
    示例:每3小时echo和wall命令
    0 */3 * * * centos /bin/echo “up Dadda!”;/usr/bin/wall “good study”
    
  2. /etc/cron.d 配置文件夹

    /etc/cron.d/dadda(每个用户可自建各自的配置文件)
    同/etc/crontab书写格式
    
  3. /etc/cron.hourly/ 文件夹(每小时调用文件夹内的脚本)

    usr/bin/on_ac_power (可查看是否电源供电)
    echo $?
    
  4. /etc/cron.daily/ 文件夹(每天的工作任务,每天的调用)

    mlocat相当于updateddb
    
  5. /etc/cron.daily/tmpwatch 清空临时脚本 (centos6才有)
    (centos6是通过计划任务是现实)
    (centos7是systemd-tmpfiles-setup通过服务实现)

  6. /etc/cron.deny 黑名单文件 (规则同at)
    /etc/cron.allow 白名单文件

crontab命令 普通用户创建计划任务程序

  1. 创建任务:

    crontab -e 创建计划任务(格式同/etc/crontab配置文件格式)
        * * * * * Dadda /bin/echo "Up Dadda!"
    
  2. 查看任务:

    /var/spool/cron(创建完任务存在此目录)
    crontab -l -u dadda     看dadda计划任务
    crontab -l              看自己计划任务
    日志记录:/var/log/cron (误删可查看日志命令恢复)
    
    
    expoort EDITOR=vim 可以变成输出颜色
    永久保存需:vim/etc/profile.d/env.sh 
                 expoort EDITOR=vim
    
  3. 删除任务

    crontab -r 删除计划任务
    
    crontab -r -i 删除之前询问 (如两个计划任务最好用i)
    

无限重启修复:/etc/crontab文件内填写reboot后

  • centos7:

    1. 按e键之后找到Linux16这行跳到行末net.inframes=0后面加rd.break
      不要按回车,回车是换行。按ctrl+x(底下有提示,)

    2. 进入紧急救援模式,df可查看找到真正的根 (我这里是/sysroot)

    3. cd /sysrootcd/

    4. vi /sysroot/etc/crontab 修改 (wq!不让写入,输入mount命令可查看是否ro权限)

    5. 重新挂载更改rw权限
      mount -o remount,rw /sysroot

    6. vi /sysroot/etc/crontab 修改 (可以存盘退出了)

 

你可能感兴趣的:(Linux)