0Pricing
Linux Server Deployment & SSH Mastery · 课时

使用 Cron 调度任务

通过创建和管理 Cron 作业自动执行重复性的服务器任务,确保脚本和命令按指定间隔运行

使用 Cron 调度任务 是 CoddyKit 上的免费 Linux Server Deployment & SSH Mastery 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Linux Server Deployment & SSH Mastery 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Linux Server Deployment & SSH Mastery 课程共包含 4 节课。

为什么要自动执行服务器任务?

服务器上的手动任务可能重复且容易因人为失误而出错。自动化可以帮助您节省时间,并确保任务始终以一致的方式执行。

想象一下,您需要每天夜间备份数据库,或每周清理旧日志文件。手动完成这些工作既乏味,又很容易忘记。

这时,调度工具就能派上用场!它们可以让服务器在指定时间或间隔自动执行任务,从而让您腾出时间处理更重要的工作。

认识 Cron:服务器的调度器

Cron 是 Linux 中用于调度任务的基础工具。它就像服务器的个人助理,确保命令或脚本在预定时间于后台自动运行。

这些计划任务称为 Cron 任务。系统中的每个用户都可以拥有自己的 Cron 任务列表,该列表存储在一个名为 crontab 的特殊文件中。

编辑您的 Crontab

要管理个人 Cron 任务,请使用 crontab 命令。

  • 要编辑您的 crontab 文件,请输入:crontab -e
  • 要列出当前的 Cron 任务,请输入:crontab -l
  • 要删除所有 Cron 任务,请输入:crontab -r(请谨慎使用!)

运行 crontab -e 时,系统会在默认文本编辑器中打开您的 crontab,通常是 nano 或 vi。

Crontab 语法:时间字段

crontab 中的每一行代表一个 Cron 任务,并遵循特定格式。它包含五个时间字段,后面跟着要执行的命令。

格式为:

minute hour day_of_month month day_of_week command
  • 分钟:0-59
  • 小时:0-23(0 表示午夜)
  • 每月第几天:1-31
  • 月份:1-12(或 Jan-Dec)
  • 星期几:0-7(0 或 7 表示星期日,1 表示星期一)

Crontab 语法:星号和范围

您不必总是指定精确的数字。Cron 提供了用于灵活设置的特殊字符:

  • *(星号):匹配该字段所有可能的值。例如,在分钟字段中使用 * 表示“每分钟”。
  • -(连字符):指定一个范围。例如,小时字段中的 9-17 表示“9 点到 17 点”。
  • ,(逗号):指定一组值。例如,可用 Mon,Wed,Fri 或 1,3,5 表示星期几。
  • /(斜杠):指定步长值。例如,分钟字段中的 */5 表示“每 5 分钟”。

Crontab 语法:实用示例

让我们看看一些常见示例,以巩固您的理解:

  • * * * * * /path/to/script.sh
    每分钟运行一次。
  • 0 3 * * * /usr/bin/backup.sh
    每天 AM 3:00 运行。
  • 0 9-17 * * 1-5 /usr/local/bin/check_service.py
    周一至周五每天 AM 9 点到 PM 5 点之间每小时运行一次。
  • */15 * * * * echo "Hello, CoddyKit!"
    每 15 分钟运行一次。

请记得将 /path/to/script.sh 替换为实际的命令或脚本路径。

特殊 Crontab 字符串

对于非常常见的调度需求,Cron 提供了比五字段语法更易读的特殊字符串:

  • @reboot:启动时运行一次。
  • @hourly:每小时开始时运行一次。
  • @daily:每天午夜运行一次。
  • @weekly:每周日午夜运行一次。
  • @monthly:每月第一天午夜运行一次。
  • @yearly(或 @annually):每年 1 月 1 日午夜运行一次。

对于简单的重复性任务,这些字符串非常实用。

环境变量和路径

Cron 运行任务时使用的环境变量非常少。这通常意味着,在终端中可以正常运行的命令,在 Cron 中可能会失败。

为避免出现问题:

  • 始终为命令和脚本使用绝对路径(例如使用 /usr/bin/php,而不是 php)。
  • 您可以直接在 crontab 文件中定义 PATH 变量,例如:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  • 或者,直接在脚本中设置环境变量。

处理输出和日志记录

默认情况下,Cron 会尝试将 Cron 任务的所有输出(标准输出和标准错误)通过电子邮件发送给拥有该 crontab 的用户。如果您没有配置电子邮件系统,这些输出可能会丢失,或占满日志文件。

最佳做法是明确重定向输出:

  • 丢弃所有输出:command > /dev/null 2>&1
  • 将输出追加到日志文件:command >> /var/log/myjob.log 2>&1

2>&1 部分会将标准错误(2)重定向到与标准输出(1)相同的位置。

系统级 Cron 与用户 Crontab

我们一直关注的是通过 crontab -e 管理的个人用户 crontab。它们非常适合执行单个用户的任务。

对于系统范围的任务,管理员通常会使用:

  • /etc/crontab:主系统 crontab,允许以指定用户身份运行任务。
  • /etc/cron.d/:用于存放独立 Cron 文件的目录,这些文件通常由应用程序安装。
  • /etc/cron.hourly/、/etc/cron.daily/ 等:存放脚本的目录,系统 Cron 会按相应间隔运行其中的脚本。

这些系统级选项可以更灵活地控制整个服务器的自动化任务。

测试您对 Cron 的了解

您已经学习了 crontab 语法的基础知识。现在来看看您是否能解读这个 Cron 任务。

回顾:使用 Cron 实现自动化

现在,您已经掌握了使用 Cron 调度任务的基础知识!

本节涵盖了以下内容:

  • 什么是 Cron:基于时间的任务调度器。
  • Crontab:用于定义 Cron 任务的个人文件。
  • 语法:理解 5 个时间字段和特殊字符(*、-、,、/)。
  • 特殊字符串:如 @hourly 和 @reboot 这样的快捷方式。
  • 最佳做法:使用绝对路径并处理输出。

借助 Cron,您可以自动执行繁琐的任务,确保服务器平稳高效地运行!

常见问题解答

「使用 Cron 调度任务」课时是免费的吗?

是的 — 「使用 Cron 调度任务」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Linux Server Deployment & SSH Mastery 课程的其余内容,请升级到 CoddyKit PRO。 Linux Server Deployment & SSH Mastery 课程共包含 4 节课。

「使用 Cron 调度任务」这节课中我会学到什么?

通过创建和管理 Cron 作业自动执行重复性的服务器任务,确保脚本和命令按指定间隔运行 你通过在浏览器中直接运行的动手代码来练习 Linux Server Deployment & SSH Mastery,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Linux Server Deployment & SSH Mastery 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Linux Server Deployment & SSH Mastery 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「使用 Cron 调度任务」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Linux Server Deployment & SSH Mastery 课中编写并运行代码吗?

能。每节 Linux Server Deployment & SSH Mastery 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 管理用户与组
  2. 监控系统进程
  3. 使用 Cron 调度任务
  4. 使用 systemd 管理系统服务
← 返回 Linux Server Deployment & SSH Mastery