Cron 作业
100%

进程利用率 · 第 8 课

Cron 作业

学习如何使用 cron 创建、检查、测试并安全运行周期性作业。

Cron 会按照周期性计划运行命令,不依赖交互式 shell。自动化既会重复正确行为,也会重复错误,因此在加入计划前,应测试命令、使用明确路径、限制权限,并规划日志记录和失败通知。

阅读 Crontab 条目

用户 crontab 条目包含五个时间字段,后跟一条命令:

30 8 * * * /home/pete/scripts/change_wallpaper

从左到右依次是分钟、小时、月中日期、月份和星期。这个示例按照 cron 守护进程适用的时区,每天 08:30 运行。星号表示该字段允许的每一个值。

如果月中日期和星期字段都受到限制,许多 cron 实现会在其中任意一个字段匹配时运行。构建同时使用这两个字段的计划前,应确认本地语义。

30 8 * * * command 何时运行?

管理用户 Crontab

使用以下命令编辑当前用户的 crontab:

$ crontab -e

变更前后都可以列出已安装的条目:

$ crontab -l

crontab -r 会删除用户的整个 crontab,而且可能不会打开编辑器。不要用它删除某一行;应编辑 crontab,并验证其余条目仍然存在。

哪个命令列出当前用户已安装的 cron 条目?

考虑 Cron 运行环境

Cron 通常只提供有限的环境和非交互式 shell。应使用命令和文件的绝对路径,显式设置必需变量,不要依赖别名、当前终端目录或 shell 启动文件。

把标准输出和错误重定向到受控日志,或使用适合系统的通知机制。用严格权限保护凭据,避免把密钥直接嵌入 crontab 命令。

为什么 cron 命令应该使用明确路径和环境设置?

测试并防止重叠

应使用相同用户,在类似的最小环境中手动运行脚本。让脚本返回有意义的退出状态,并写入带时间戳的结果。安装后,等待一个无害的测试计划或受控运行,再验证实际副作用和日志。

如果一次运行可能超过计划间隔,应让程序能够安全并发,或在可用时使用 flock 等锁定机制:

*/5 * * * * /usr/bin/flock -n /run/user/1000/report.lock /home/pete/bin/report

锁文件路径应允许作业用户安全创建,还要确定能否接受跳过运行。Cron 不会自动保证同一时刻只有一个实例运行。

作业执行时间超过计划间隔时会有什么风险?

选择合适的调度器

Cron 适合简单的周期性命令。在 systemd 主机上,systemd 定时器可以提供依赖集成、错过时间后的补跑、随机延迟和日志集成。如果作业必须在多台机器上全局只执行一次,应用或集群调度器可能更安全。

为什么普通的逐主机 cron 可能不适合需要集群全局恰好执行一次的作业?

课程已完成

你已完成 Cron 作业

现在,你可以在明确计划和运行前提下管理周期性 cron 作业。

  • 按定义顺序阅读五个时间字段。

  • 检查和编辑用户 crontab,而不删除无关作业。

  • 明确定义路径、环境、日志和凭据处理方式。

  • 以作业用户身份测试,并防止意外重叠。

  • 选择符合主机环境和协调需求的调度器。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
返回 进程利用率