Linux - cron - 基础

  1. 概述

    1. cron 相关的理解与使用
  2. 背景

    1. 最近实在没啥写的了

      1. 我写东西, 一般是是这些
        1. 看了书过后, 做一些系统的整理
          1. 比如之前的 docker 和 git 系列
        2. 遇到了实际问题, 解决过程也不是那么顺利, 中间经历了一些求助与试错
          1. 一般就是先看异常, 再去百度, 找到有网友的解决方案, 自己照着做一遍, 然后洗稿...
    2. 最近在回顾 jojo 的奇妙冒险

      1. 里面一众时间系的能力, 让我大呼牛逼
    3. 于是, 在这个暂时找不到东西写的时间里, 我决定写一下 cron

      1. 兄弟, 能划水的东西写一个, 少一个, 你得加紧看书啊..
    4. 回想起早年的一些遗留问题

      1. 我用 cron, 用 crontab 命令写配置
        1. 能用但是查不到配置
      2. 我同事直接在 /etc/crontab 下写配置
        1. 当然能用
        2. 还比我的简单
      3. 是时候整理一下了
  3. 准备

    1. os
      1. centos 7

1. 一些场景

  1. 概述

    1. 列举一些场景
  2. 场景

    1. 我想在 某个特定的时间, 做某件事

      1. 比如
        1. 在 2019-12-31 23:59:59, 打印一句 Goodbye 2019
        2. 在 2019-12-07 22:42:18, 定时开机
          1. 你这是在为难我 linux
          2. 不过定时关机, 貌似是可以
    2. 我想在 按照某个特定的频率, 执行某个操作

      1. 比如
        1. 在 每一秒, 打印一下当前时间
        2. 在 每分钟的 30 秒, 打印时间
        3. 在 每小时的 30 分, 打印时间
        4. 在 每一天的 18 点, 打印时间
        5. 在 每个月的 15 日, 打印时间
        6. 在 每一周的 星期三, 打印时间
        7. 在 每一年的 1月1日, 打印时间
  3. 处理方法

    1. 人工

      1. 到时候定个闹钟, 然后运维去执行脚本
        1. 闹钟可能定错
        2. 运维可能没空
    2. 自动

      1. 事先准备好脚本
      2. 事先设定好时间
      3. 让 linux 自己去执行
    3. 怎么想, 都是后面那个靠谱

      1. 只要 服务器 开着, 就不会有问题
      2. 这块的工具, 确实有
        1. linux 上, 它叫做 cron
  4. 关于 cron 的名字

    1. wikipedia 上, 是这么描述的

      # cron 名字的来源, 是希腊语单词 时间, χρόνος.
      # 这单词咋读, 好像同 Chronos
      # 希腊神话里的时间之神 柯罗诺斯
      # 不过他和 宙斯他爹 克诺洛斯, 不是同一个人, 也没啥关系...
      The origin of the name cron is from the Greek word for time, χρόνος.

2. crontab 与 crond

  1. 概述

    1. 简介和比较 crontab 和 crond
  2. 场景

    1. 在虚机上, 当我尝试输入 cron 时, 出现了两个命令

      1. crond
      2. crontab
    2. 尝试

      1. help
        1. 两个命令的 help 输出不一样
      2. which
        1. 发下他们的路径, 也不一样
    3. 结论

      1. crond 和 crontab, 是两个不同的东西
  3. 二者关系

    1. crontab

      1. cron 的前台命令行
        1. 用来操作 crontable
        2. crontable 是记录每个用户 cron 命令行的脚本
    2. crond

      1. cron 的后台进程
        1. 通常是系统自带, 开机启动
        2. 每隔一段时间, 就会去扫描用户的 crontable
        3. 然后执行 crontable 中的语句
    3. 总结

      1. crond 和 crontab 是 cron 的组成部分
        1. crontab 是前台命令行
        2. crond 是后台守护进程

3. 任务调度

  1. 概述

    1. 简述 linux 的任务调度
  2. 任务调度

    1. 系统任务调度

      1. 概述

        1. 操作系统周期执行的 任务调度
        2. 这个简单了解一下
      2. 相关文件

        1. 系统日志相关

          # 系统日志
          # 这块我暂时了解不多, 不详细接受
          /etc/logrotate.d/syslog
        2. cron 相关

          # 系统使用的 cron 文件
          # 不建议用户使用
          # 里面有 格式描述
          /etc/crontab
          # 这里面也是 系统的人物
          /etc/cron.d/
          # 下面也是
          cron.daily
          cron.hourly
          cron.monthly
          crontab
          cron.weekly
    2. 用户任务调度

      1. 概述

        1. 每个用户, 有自己的任务调度
        2. 这个才是我们要用到的东西
      2. 相关文件

        1. cron 配置

          # 配置名字, 就是用户名
          # 按用户隔离
          /var/spool/
        2. 权限

          # 这俩目前怎么生效, 我暂时还不明白
          /etc/cron.deny
          /etc/cron.allow

4. cron 配置简述

  1. 概述

    1. 简述 cron 配置的写法
  2. 位置

    1. 示例

      # 这个是例子, 最好不要在这里直接加
      /etc/crontab
    2. 实际文件

      # 刚开始可能是空的, 后面会加上
      /var/spool/cron/
  3. 语法

    1. 变量

      # 指定 shell
      SHELL=/bin/bash
      # 指定 path
      # 没有指定的话, 命令需要带 完整路径
      PATH=/sbin:/bin:/usr/sbin:/usr/bin
      # 指定 mailto
      MAILTO=root
    2. 格式

      1. 时间

        1. 字段
            1. 取值范围
              1. 0 - 59
            1. 取值范围
              1. 0 - 23
            1. 取值范围
              1. 1 - 31
            1. 取值范围
              1. 1 - 12
            1. 取值范围
              1. 0 - 7
      2. 用户

        1. 指定 执行用户
          1. 注意, 此处有坑
            1. 这个配置, 在 crontab 中需要指定
            2. 在 /var/spool/cron 下不需要指定
              1. 指定了反而会出错
      3. 命令

        1. 指定执行命令
    3. 例子

      # 不适用 crontab
      # 使用 root 的 cron 配置
      # 每分钟 向 log 文件后追加 hello
      # 可以配合环境变量
      # 也可以 先用 which 命令, 查找 echo 的真实路径
      * * * * * /usr/bin/echo 'hello' >> /root/log

5. 操作

1. crond

  1. 准备

    1. cron 配置的执行, 前提是 crond 的启动
  2. 命令

    # 确认
    > systemctl status crond
    # 启动
    > systemctl start crond
    # 关闭
    > systemctl stop crond
    # 重启
    > systemctl restart crond

2. crontab

  1. 概述

    1. 操控 cron 命令
  2. 命令

    # 1. 查看当前用户的 cron 配置
    # 也可以把输出内容重定向, 用来做备份
    > crontab -l # 2. 如果是 root 用户, 则可以指定自己或者其他
    # 后面的命令, 也可以加 -u, 我就不多描述了
    > crontab -u <user> -l # 3. 编辑 cron 配置
    # 配合会写到 /var/spool/cron/<usr>
    > crontab -e # 4. cron 配置读入
    # 配置可以有 命令1 构造
    > crontab <filename>

3. 日志文件

  1. 概述

    1. 可以查看 cron 执行的日志文件
  2. 路径

    /var/log/cron

6. 其他

  1. cron 的使用, 感觉还是比较广泛的
    1. quartz
      1. 这个组件可以实现类似的功能
        1. 好像是 java

ps

  1. ref

    1. 在线Cron表达式生成器

      1. 很不错的东西

        1. 实在不想写, 可以让他帮你做
        2. 也可以在学习的时候, 用来做 标准答案
      2. 注意

        1. crontab 下的 cron 表达式, 没有 second 这个维度, 直接从 mintue 开始
          1. 不要搞错了
    2. Cron运行原理

      1. 深入到了 cron 的运行原理
      2. 我现在还不敢看, 愿它能给足够强大或者感兴趣的你带来帮助
      3. 博主在 cron 算是经验丰富, 很强大的人
    3. Linux crontab命令详解

      1. 明确区分了 任务调度 的种类
        1. 这个真的开拓了视野
    4. crond和crontab详解

      1. cron.deny 和 cron.allow 的讲解
      2. 结尾处的 日志
  2. 后续

    1. 系统日志
    2. 系统任务
    3. cron 表达式语法
上一篇:jenkins cron


下一篇:js框架页跳转