cron相关知识介绍

  1. 什么是 crond?
    crond 是 Unix/Linux 系统中的一个守护进程(daemon),负责管理和执行定时任务。“cron” 来源于希腊语 chronos,意为"时间"。

  2. cron 任务:
    这些是被设置为在特定时间或间隔运行的命令或脚本。例如,你可以设置一个任务每天凌晨 3 点备份数据。

  3. crontab:
    这是存储 cron 任务的配置文件。每个用户可以有自己的 crontab 文件。系统级的 crontab 通常位于 /etc/crontab。

  4. crontab 语法:
    典型的 crontab 条目格式为:

    * * * * * command_to_execute
    

    五个星号分别代表:分钟(0-59) 小时(0-23) 日(1-31) 月(1-12) 星期几(0-7)

5. crond 的启动和停止:

  • 启动:通常使用 service crond start/usr/sbin/crond
  • 停止:使用 service crond stoppkill crond
  • 重启:service crond restart
  1. 为什么要重启 crond:

    • 应用新的配置:修改 crontab 后,有时需要重启 crond 以确保更改生效。
    • 解决问题:如果 crond 行为异常,重启可能会解决问题。
    • 系统更新:系统更新后可能需要重启 crond。
  2. 编辑 crontab:
    使用 crontab -e 命令可以编辑当前用户的 crontab 文件。

  3. 查看 crontab:
    使用 crontab -l 可以列出当前用户的所有 cron 任务。

  4. cron 日志:
    cron 任务的执行通常会记录在系统日志中,如 /var/log/cron。

  5. 安全性:
    由于 cron 任务可以在后台自动执行,确保只有授权用户能够创建或修改 cron 任务很重要。

  6. 环境变量:
    cron 任务在执行时可能没有完整的环境变量,所以在脚本中最好使用绝对路径。

【示例】

echo "0 0 * * * find /log/ -mtime $limit_time -name \"*.gz\" -exec rm -rf {} \;" >> /var/spool/cron/root

这行代码可以分成几个部分来理解:

  1. echo 命令:
    用于输出字符串。在这里,它用来将一个新的 cron 任务添加到 crontab 文件中。

  2. cron 时间语法 “0 0 * * *”:

    • 第一个 0:分钟(0-59)
    • 第二个 0:小时(0-23)
    • 第一个 *:日期(1-31)
    • 第二个 *:月份(1-12)
    • 第三个 *:星期几(0-7,其中 0 和 7 都表示星期日)
      这个模式表示每天午夜(00:00)执行。
  3. find 命令:
    用于在文件系统中搜索文件。

    • /log/:搜索的起始目录
    • -mtime $limit_time:查找修改时间超过 l i m i t t i m e 天的文件 ( limit_time 天的文件 ( limittime天的文件(limit_time 是一个变量,其值在脚本的其他地方定义)
    • -name “*.gz”:查找文件名匹配 *.gz 模式的文件(即所有 .gz 结尾的文件)
  4. -exec 选项:
    允许对 find 命令的每个结果执行一个命令。

  5. rm -rf {} ;:

    • rm:删除文件命令
    • -r:递归删除(用于目录)
    • -f:强制删除,不提示
    • {}:是一个占位符,代表 find 命令的每个结果
    • ;:表示 -exec 命令的结束
  6. /var/spool/cron/root:
    -追加重定向操作符,将输出追加到指定文件的末尾
    -/var/spool/cron/root:root 用户的 crontab 文件路径

综合起来,这行代码的作用是:
添加一个 cron 任务到 root 用户的 crontab 中,该任务会在每天午夜执行。它会查找 /log/ 目录下所有修改时间超过 $limit_time 天的 .gz 文件,并删除它们。

重要语法点:

  1. cron 时间语法:使用五个字段来指定执行时间。
  2. find 命令:强大的文件搜索工具,可以基于多种条件搜索文件。
  3. -exec 选项:允许对 find 的结果执行操作。
  4. 转义字符 ():在 echo 命令中使用 \ 来转义引号,确保它们被正确解释。
  5. 重定向操作符 (>>):用于将输出追加到文件。

【示例】

其中\"*.gz\"为什么有\,这个\起什么作用

\"*.gz\" 中,反斜杠 \ 被用作转义字符。它的作用是:

  1. 保护引号:
    反斜杠 \ 告诉 shell 不要特殊处理紧随其后的引号 ",而是将其视为普通字符。

  2. 防止提前解释:
    如果不使用 \,外层的 echo 命令可能会尝试解释或展开 *.gz,这可能导致意外的行为。

  3. 保持字面值:
    通过转义,我们确保 “*.gz” 作为字面字符串被传递给 find 命令,而不是被 shell 提前解释。

  4. 多层解释:
    这行代码涉及多层命令解释(echo 命令、cron 任务、find 命令),使用 \ 可以确保 *.gz 模式正确地传递到最终的 find 命令。

为什么这很重要?

  • 如果不使用 \,shell 可能会在 echo 命令执行时就展开 *.gz,而不是在 cron 任务实际运行时展开。
  • 在 crontab 环境中,没有转义的 * 可能会被错误解释。
  • 转义确保了 find 命令接收到准确的 “*.gz” 模式,而不是已经被展开或修改的版本。

比较:

  • 不转义:"*.gz" - 可能在 echo 执行时就被展开。
  • 转义:\"*.gz\" - 保证作为字面字符串 “*.gz” 被传递给 find 命令。

【示例】

   # Flush black box to disk
    sed -i '/\/proc\/kbox\/regions\/\* \/log\/kbox\//d' /var/spool/cron/root
    echo "0 0 * * * cp -rf /proc/kbox/regions/* /log/kbox/" >> /var/spool/cron/root

这段代码的主要目的是设置一个定时任务,用于定期将某些系统数据(可能是黑匣子数据)从内存复制到磁盘上。让我们逐行分析:

  1. sed -i '/\/proc\/kbox\/regions\/\* \/log\/kbox\//d' /var/spool/cron/root

    这行使用 sed 命令来修改 root 用户的 crontab 文件。

    • sed: 流编辑器,用于修改文本文件。
    • -i: 直接修改文件,而不是输出到标准输出。
    • /\/proc\/kbox\/regions\/\* \/log\/kbox\//d: 这是 sed 的模式匹配和操作指令。
      • 斜杠 / 之间的是要匹配的模式。
      • 很多斜杠都被转义了 (\/),因为它们是路径的一部分。
      • d 指令表示删除匹配这个模式的行。

    作用:删除 crontab 中任何包含 “/proc/kbox/regions/* /log/kbox/” 的行。这是为了确保不会有重复的任务。

  2. echo "0 0 * * * cp -rf /proc/kbox/regions/* /log/kbox/" >> /var/spool/cron/root

    这行添加新的 cron 任务到 root 的 crontab 文件中。

    • 0 0 * * *: cron 时间表达式,表示每天午夜执行。
    • cp -rf /proc/kbox/regions/* /log/kbox/: 实际执行的命令。
      • cp: 复制命令。
      • -r: 递归复制,用于复制目录及其内容。
      • -f: 强制复制,不提示覆盖。
      • /proc/kbox/regions/*: 源路径,复制这个目录下的所有内容。
      • /log/kbox/: 目标路径,复制到这个目录。

    作用:添加一个每天午夜执行的任务,将 /proc/kbox/regions/ 目录下的所有内容复制到 /log/kbox/ 目录。

综合解释:

  1. 数据同步:这段代码设置了一个每日任务,将 /proc/kbox/regions/ 下的数据复制到 /log/kbox/。

  2. 系统监控:/proc 目录通常包含系统和进程信息。这个任务可能是在保存某种系统状态或日志数据。

  3. 黑匣子功能:从 “Flush black box to disk” 的注释来看,这可能是一个类似飞机黑匣子的功能,定期保存重要的系统状态数据。

  4. 定期备份:通过每天执行,确保即使系统崩溃,也能保留最近一天的数据。

  5. 安全性:这个任务在 root 的 crontab 中运行,表明它需要高级权限,可能涉及敏感或重要的系统数据。

  6. 维护性:先删除旧任务再添加新任务,确保不会累积重复的任务,保持 crontab 的清洁和可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值