Cron 命令

17 Mar 2025 | 6 分钟阅读

Cron 可以定义为一种由类 Linux 操作系统提供的软件实用程序,该实用程序在预定的时间间隔内执行计划任务。它是一个守护进程,并作为后台进程运行。当遇到条件或事件时,它会在没有用户干预的情况下,在预定的时间执行描述的任务。

通常,处理任何重复性操作对系统管理员来说都是一项艰巨的任务。因此,系统管理员可以通过cron命令列表,安排这些类型的进程在后台自动以固定的时间间隔运行。

它允许所有用户定期执行计划操作,例如每天备份,每隔一段时间同步文件,以及每周安排更新。

Cron 会定期检查计划任务,当计划时间字段与当前时间字段匹配时,将执行计划命令。在进入多用户运行级别时,它会自动从/etc/init.d文件启动。

前提条件

  • 拥有 Linux 操作系统的系统
  • 可以访问终端/命令行窗口(Ctrl+Alt+F2 或 Ctrl+Alt+T
  • 拥有 sudo 或 root 权限的用户帐户

Crontab 的基本语法

Cron 读取所有配置文件中的命令列表以供执行。守护进程应用特定的语法来解释crontab配置文件中的行。

crontab(“cron 表”)是一个命令列表,用于在特定时间执行计划操作。它允许用户添加、删除或修改计划操作。

crontab命令的语法包含六个部分,用空格分隔,其中前五个部分说明执行操作的时间,最后一个部分说明命令。

分钟(包含 0 到 59 的值)。

小时(包含 0 到 23 的值)。

月份中的日期(包含 1 到 31 的值)。

一年中的月份(包含 Jan 到 Dec 或 1 到 12 的值,将应用月份名称的前三个字母)。

一周中的日期(包含 Sun 到 Sat 或 0 到 6 的值,将应用日期的前三个字母)。

命令。

语法

Cron 命令的选项

1. -f:此选项用于在前台模式下运行,而不进行守护进程化。

2. -1:此选项将启用 LSB 兼容的文件名,即/etc/cron.d。

3. -n:此选项用于在传输邮件时将 FQDN 添加到主题中。

4. -L loglevel:它会告知 cron 要记录哪些任务,使用一些值,如下所示:

1.此值将记录每个 cron 任务的开始。

2.此值将记录每个 cron 任务的完成。

4.此值将记录每个失败的任务以及退出状态不等于零的情况。

8.此值将记录每个 cron 任务的进程编号。

以下是一些定义日期和时间格式字段的规则:

  • 如果五个字段中的一个被固定为星号 (*)。它代表每个字段值。例如,我们可以在星期字段中放置星号 (*)以每天执行命令。
  • 此外,我们可以应用用连字符 (-)分隔的数字范围来包含多个连续值,但不是每个字段值。例如,我们可以应用 7-10 来运行从Jul-Oct的任何命令。
  • 逗号 (,)运算符用于包含数字列表,这些数字可能连续也可能不连续。例如,星期字段中的“1, 3, 5”表示命令在每周一、周三和周五执行。
  • 斜杠 (/) 字符用于跳过提供的数字值。例如,小时字段中的“*/4”表示“每 4 小时”,它等于 0、4、8、12、16、20 数字。

允许用户执行 cron 任务

用户必须在此文件中列出,才能在文件可用时执行 cron 任务。

如果文件(即 /etc/cron.allow)不存在但文件(即 cron.deny)存在,则用户不应在此文件中列出,才能执行 cron 任务。

重要提示:如果上述文件都不存在,则只有系统管理员(超级用户)才允许使用提供的命令。

要运行的命令

它定义了要运行的命令。它说明了 cron 要执行的命令或脚本的实际文件名或目录。

下面有一个例子

上面的命令会查找系统的根目录并执行脚本backup.sh。我们可以定义任何想要的命令或脚本。

输出(可选)

cron 默认会在执行时向 crontab 文件所有者发送电子邮件。这是一种有效的记录操作方式。请记住,少量或常规操作会很快填满您的收件箱。

我们可以通过停止输出电子邮件来防止这种情况,因为它是可选的。

要关闭电子邮件输出,我们可以在命令和计时字段后添加字符串>/dev/null 2>&1

设置 Cron 操作

我们需要使用文本编辑器打开crontab来配置cron操作,并输入要执行的命令的语法。

编辑 crontab 文件

我们需要在终端窗口中键入一个命令来打开当前用户的 crontab 配置文件。命令如下:

Cron Command

我们可以每行包含一个计划操作。

完成包含操作后,保存文件然后退出。cron 守护进程将读取并运行给定的指令。

注意:Cron 不需要重新启动即可应用修改。

编辑不同用户的 crontab

我们可以输入一个命令来编辑不同用户的 crontab。命令如下:

Cron 操作示例

在描述操作时,我们可以使用符号指定所有值。在任何字段中输入一个值只会针对该值执行命令。

例如

只有当月份的第一天(0)落在星期三(4)时,它才会执行,即使它设置为早上 2 点执行。如果我们修改为如下:

上面的命令将在每个月的第一天早上 2 点执行。该表通过我们之前的示例,提供了一些带有文件/root/backup.sh的常用命令。该表如下所示:

序号命令Cron 操作
1.* * * * * /root/backup.sh每分钟运行 Cron 操作
2.30 * * * * /root/backup.sh每 30 分钟运行 Cron 操作
3.0 * * * /root/backup.sh每小时运行 Cron 操作
4.0 0 * * * /root/backup.sh每天午夜运行 Cron 操作
5.0 2 * * * /root/backup.sh每天早上 2 点运行 Cron 操作
6.0 0 1 * * /root/backup.sh每月第一天运行 Cron 操作
7.0 0 1 5 * * /root/backup.sh每月十五号运行 Cron 操作
8.0 0 0 1 2 * /root/backup.sh12 月 1 日午夜运行 Cron 操作
9.0 0 * * 6 /root/backup.sh每周六午夜运行 Cron 操作

在使用 cron 工作时,需要记住一些要点。这些要点如下:

  • 拥有源代码版本控制,以便跟踪和维护 cron 表达式的修改。
  • 根据频率或重要性组织所有计划操作,并根据其时间或操作范围对它们进行分组。
  • 通过最初使用高频率检查计划操作。
  • 不要直接在 cron 表达式中编写常规代码或各种重定向和管道。而是将它们写入计划脚本,并将脚本写入 crontab。
  • 如果类似的命令集频繁重复,请使用别名。
  • 避免使用 cron 作为超级用户运行脚本或命令。