Linux任务计划

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

  • 未来的某时间点执行一次某任务:at,batch
  • 周期性执行某任务:crontab
    • 以上两种的执行结果会通过邮件发送给用户(本地邮件服务,非互联网)

            

    • 检测邮件服务是否开启
      • ss -tnlp
      • 或者netstat -tnlp
      • 如果存在127.0.0.1:25(IPV4)/::1:25(IPV6)则说明邮件服务已经开启

本地电子邮件服务

  • 协议
    • smtp:simple mail transmission protocal/简单邮件传输协议,应用层协议,只能发邮件不能收邮件
    • pop3:post office protocal/邮局协议
    • imap4:internet mail access protocal/互联网邮件访问协议
  • mail/mailx命令
    • 收发互联网邮件
    • MUA:mail user agent,用户收发邮件的工具程序
    • mail [-s "SUBJECT"] username[@hostname]
    • "."号单独一行表示邮件结束了/或者ctrl+d
    • mail命令不带任务参数表示收邮件

    • 邮件正文的生成
      • 交互式输入
      • 通过输入重定向:mail -s "fstab file" root < /etc/fstab
      • 通过管道:cat /etc/fstab | mail -s "fstab file" root

 at命令:

  • 在未来某个时间点执行一次任务
  • at [OPTION]... TIME
  • TIME:
    • HH:MM [YYYY-mm-dd]
    • noon, midnight, teatime(下午四点)
    • HH:MM tomorrow
    • now+#,例如at now+1min(简写minutes)
      • Unit: minutes, hours, days, weeks
  • ctrl+d提交命令

  • at -l查看提交且未执行的at命令队列,相当于atq命令
  • at的作业有队列,用单个字母表示,默认都使用a队列
  • at -f FILE TIME:表示从指定文件中读取作业任务,不用再交互式输入
  • at -d #:删除未执行的某个作业任务,相当于atrm
  • at -c #:查看某个作业任务的详细信息,包括执行环境(默认的at执行环境路径可能不对,所以某些命令可能需要给出绝对路径)
  • at -q QUEUE:指明队列
  • 注:作业执行的结果以邮件发送给提交作业的用户

batch命令:

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

周期性任务计划:cron

  • 服务程序
    • cronle:主程序包,提供了crond守护进程及相关辅助工具
  • 确保crond守护进程(daemon)处于运行状态
    • systemctl status crond[.service]/CentOS 7
    • service crond status/CentOS 6
  • 向crond提交作业的方式不同于at,它需要使用专用的配置文件,此文件有固定格式,不建议使用文本编辑器直接编辑此文件,要使用crontab命令
    • cron任务分为两类
      • 系统cron任务:主要用于实现系统自身的维护
        • 只能手动编辑/etc/crontab文件
      • 用户cron任务:
        • 命令:crontab
    • 系统cron的配置格式

      • 配置文件位置:/etc/crontab
      • 每一行定义一个周期性任务,共7个字段
        • * * * * *:表示定义周期性时间
        • user-name:运行任务的用户身份
        • command to executed:要执行的任务
      • 此处的环境变量不同于用户登录后获得的环境变量,因此建议命令使用绝对路径,或者自定义PATH环境变量
      • 执行结果邮件发送给MAILTO指定的用户
    • 用户cron的配置格式

  • 配置文件位置:/var/spool/cron/USERNAME
  • 每一行定义一个周期性任务,不需要指定用户名,共6个字段
  • 此处的环境变量不同于用户登录后获得的环境变量,因此建议命令使用绝对路径,或者自定义PATH环境变量
  • 邮件发送给当前用户
    • 时间表示法
      • 特定值:给定字段处有效取值范围内的值
        • 注:day of week和day of month一般不同时使用
        • 如果不设置某时间字段,保留*号通配符
        • 例如:3 * * * *:每小时的第三分钟执行一次
        • 例如:3 4 * * 5:每周五的四点三分执行一次
      • *:每
      • 离散取值:在给定时间段上使用逗号分隔的多个值,没有空格
        • 例如:9 8 * * 3,7:每周三和周日的八点九分执行一次
      • 连续取值:在给定时间段上使用-连接开头和结束
        • 例如:0 9-18 * * 1-5:工作时间
      • 定义步长:/#
        • */5 * * * *:每5分钟执行一次
        • 当时间段最大值不能被整除时,其意义将不复存在
        • 最小时间单位是分钟,想完成秒级任务需要借助于其它机制实现,例如在脚本中秒级循环执行
  • crontab命令
    • -e:编辑任务(直接用vim编辑文件没有语法检查)
    • -l:列出所有任务
    • -r:移除所有任务,即删除/var/spool/cron/USERNAME文件;如果只想删除某一个任务,-e编辑(#号注释)
    • -i:在使用-r的时候提示用户确认
    • -u USER:root用户可以为其他用户管理cron任务,例如:crontab -u gentoo -l
    • 注:百分号有特殊意义,需要转义;单引号中的百分号不需要转义
      • 例如:touch $(date +%F-%H-%M-%S)

注:如果不想接受邮件,可以在每个任务命令后面输出重定向:

  • COMMAND > /dev/null(错误流输出还是会发邮件的)
  • COMMAND &> /dev/null,错误也不收邮件

注:如果在指定时间点上关机未执行,下次开机不会自动执行;如果想下次开机自动执行,可以使用anacron实现

练习:

 

原文地址:https://www.cnblogs.com/jacky1982/p/7859167.html