Raspberry Pi OS 上的 Cron 作业和任务调度

Jinku Hu 2023年1月30日
  1. Raspberry Pi OS 上的 Cron 作业和任务调度基础知识
  2. 在 Raspberry Pi OS 上的 Crontab 配置文件中添加计划命令
  3. 在 Raspberry Pi OS 上使用 Cron 安排系统关闭
Raspberry Pi OS 上的 Cron 作业和任务调度

本文将介绍如何在 Raspberry Pi OS 上使用 cron 作业创建计划任务。

Raspberry Pi OS 上的 Cron 作业和任务调度基础知识

Raspberry Pi OS 提供了一个预装的 cron 守护程序来执行预定的命令,就像大多数现代 Linux 发行版一样。

守护程序是在操作系统启动时创建的程序。它们主要运行直到系统关闭或明确的用户发出信号停止它们。

通常,在 Raspberry Pi OS 上默认运行几个常见的守护进程。你通常可以使用进程名称中的 d 后缀来识别它们,这在基于 Unix 的系统上是一种公认​​的约定。

cron 守护程序允许你在特定时间或间隔自动执行命令。由于操作系统管理涉及许多重复性任务,因此非常需要后一个功能。

cron 守护进程调度和执行的命令称为 cron 作业。通常,cron 守护程序读取配置文件 crontab,其中包含使用特殊语法的计划命令和相应时间。

由于 Raspberry Pi OS 是一个多用户系统,cron 守护进程可以执行用户特定的计划任务,这些任务将存储在相应的 crontab 文件中。

在开始向 crontab 文件添加命令之前,最好使用以下命令验证系统是否运行 cron 守护程序。

sudo systemctl status cron.service

如果守护进程由于某种原因处于非活动状态,你可以运行下一个命令来启动它并使其处于安全状态。

sudo systemctl start cron.service && sudo systemct enable cron.service

在 Raspberry Pi OS 上的 Crontab 配置文件中添加计划命令

单个用户文件存储在 /var/spool/cron/crontabs 目录中,其中配置文件具有相应用户的名称。你可以使用该命令开始编辑你的 crontab。

crontab -e

此命令可能会要求你选择一个命令行编辑器来编辑 crontab 文件。你可以选择你最喜欢的任何选项。

一旦打开 crontab 文件,它通常包括描述配置文件细节的注释掉的文本,甚至提供一个简单的 cron 作业条目。在这种情况下,我们将在配置文件中的注释行之后开始编写示例命令。

每个 cron 作业(任务)都在一行中定义,该行以五个时间日期字段开头,然后是命令,而每个字段都由空格分隔。

时间-日期字段指定何时运行给定命令并具有以下顺序。

minute hour dom month dow command

每个时间-日期字段可以有一个整数值、一个星号 (*) 字符、用于指定范围的破折号分隔值或一个以逗号分隔的整数/范围列表。

此外,范围符号后面可以跟斜杠和整数,以更简洁地编写一系列数字。同时,下表显示了每个时间-日期字段的有效数字和相应的含义。

字段 描述 范围
分钟 n-th 分钟 of hour 0 - 59
小时 n-th 小时 of day 0 - 23
月的一天 1 - 31
月 of year 1 - 12
周的一天 0 - 6 (0 表示星期日)

在 Raspberry Pi OS 上使用 Cron 安排系统关闭

我们将在以下示例中演示多种时间日期格式以在 Raspberry Pi OS 上安排关机命令。下一个 cron 作业行将安排在每个工作日的凌晨 1:00 关闭系统。

 0 1 * * 0-6 sudo shutdown -h

请注意,如果你从非 root 帐户添加 shutdown 命令,则需要 root 权限。此外,crontab -e 命令需要使用 sudo 前缀执行。

使用 crontab 命令添加 cron 作业后,它应该立即生效,因此你可以通过提前一两分钟安排命令来测试命令。

或者,你可以使用下一个命令在每月的奇数天凌晨 1:00 安排相同的 cron 作业。

 0 1 1-31/2 * * sudo shutdown -h

你可以在 Debian 手册Arch Linux wiki 中找到有关使用 cron 作业的更高级场景的其他材料。

作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - Raspberry Pi

相关文章 - Raspberry Pi OS