Cron Job 表达式解析

Redisant Toolbox 是一款面向开发者的多合一工具箱,超过30种罕用的开发工具;精心设计,疾速、高效;离线应用,尊重您的隐衷。

[TOC]

一遍又一遍地执行雷同的工作可能会很麻烦。 Cron Job 让用户能够主动执行工作。 这节俭了贵重的工夫,让用户能够专一于其余重要工作。

在这本面向初学者的综合指南中,您将学习 cron job 的基础知识,包含它们的类型、语法、非凡字符串和权限。 到本文完结时,您将可能应用 cron job 更无效地安顿工作。

应用 Redisant Toolbox 轻松编辑 Cron Job

什么是 Cron Job?

Cron 是一个实用程序,容许用户输出命令以在特定工夫反复安顿工作。 在 cron 中安顿的工作称为 cron job。 用户能够确定他们想要自动化的工作类型以及应该在何时执行。

Cron 是一个守护过程——一个执行非交互式作业的后盾过程。 在 Windows 中,您可能相熟后盾过程,例如与 cron 守护过程相似工作的 Services。

cron 文件是一个简略的文本文件,其中蕴含在特定工夫定期运行的命令。 默认的零碎 cron 表或 crontab 配置文件是 /etc/crontab

只有系统管理员能够编辑零碎 crontab 文件。 然而,类 Unix 操作系统反对多个管理员。 每个人都能够创立一个 crontab 文件并编写命令以随时执行工作。

应用 cron 作业,用户能够主动执行系统维护、磁盘空间监控和打算备份。 因为其性质,cron 作业非常适合 24/7 全天候工作的计算机,例如服务器。

尽管 cron 作业次要由系统管理员应用,但它们也对 Web 开发人员无益。

例如,作为网站管理员,您能够设置一个 cron 作业在每天午夜主动备份您的网站,或者在每周一午夜查看损坏的链接,或者在每个周五中午革除您的网站缓存。

然而,与任何其余程序一样,cron 有一些限度,您在应用它之前应该思考:

  • 作业之间的最短距离为 60 秒。 应用 cron,您将无奈每 59 秒或更短时间反复一项工作。
  • 集中在一台计算机上。 Cron 作业不能散发到网络上的多台计算机。 所以如果运行cron的电脑死机了,定时工作就不会执行,错过的作业就只能手动运行了。
  • 没有主动重试机制。 Cron 被设计为在严格指定的工夫运行。 如果工作失败,它将在下一个预约工夫之前不会再次运行。 这使得 cron 不适用于增量工作。

因为存在这些限度,cron 对于在特定工夫以至多 60 秒的固定距离运行的简略工作来说是一个杰出的解决方案。

根本的 Cron 作业操作

本教程将向您展现如何通过向 Linux 或其余类 Unix 操作系统上的 Bash 等 shell 程序输出命令来安顿 cron 作业。

在持续 cron 的基本操作之前,理解不同的 cron 作业配置文件是必不可少的:

  • 零碎定时工作。 应用它来安顿零碎范畴内的根本作业,这些作业只能应用 root 权限进行更改。
  • 用户 crontab。 该文件容许用户创立和编辑仅实用于用户级别的 cron 作业。

如果要编辑零碎 crontab,请确保以后用户具备 root 权限。

以下是 cron 能够执行的一些基本操作:

chenjing@LAPTOP-IH0640SI:~$ crontab -ucrontab: option requires an argument -- 'u'crontab: usage error: unrecognized optionusage:  crontab [-u user] file        crontab [ -u user ] [ -i ] { -e | -l | -r }                (default operation is replace, per 1003.2)        -e      (edit user's crontab)        -l      (list user's crontab)        -r      (delete user's crontab)        -i      (prompt before deleting user's crontab)

要创立或编辑 crontab 文件,请在命令行中输出以下内容:

crontab -e

如果在您的零碎中没有找到 crontab 文件,该命令将主动创立一个新文件。 crontab -e 容许您增加、编辑和删除 cron 作业。

你须要一个像 vi 或 nano 这样的文本编辑器来编辑 crontab 文件。 第一次输出 crontab -e 时,零碎会要求您抉择要应用哪个文本编辑器来编辑文件。

要查看零碎中流动的打算工作列表,请输出以下命令:

crontab -l

如果您的零碎有多个用户,您能够通过以超级用户身份输出以下命令来查看他们的 crontab 文件列表:

crontab -u username -l

您还能够通过键入以下 crontab 命令轻松编辑其余用户的打算作业:

sudo su crontab -u username -e

要给本人 root 权限,请将 sudo su 附加到命令的结尾。 一些命令,包含这个命令,只能由 root 用户执行。

最初,要删除 crontab 文件中的所有打算工作并从新开始,请键入以下命令:

crontab -r

或者,以下命令与 crontab -r 雷同,除了它会在删除 crontab 之前提醒用户应用 是/否 选项:

crontab -i

除了 crontab 之外,root 用户还能够将 cron 作业增加到 etc/cron.d 目录中。它最适宜运行用于主动装置和更新的脚本。

请记住,将 cron 作业增加到此目录的用户必须具备 root 拜访权限并合乎 run-parts 的命名约定。

或者,root 用户能够将他们的脚本挪动到以下目录中以安顿它们的执行:

  • /etc/cron.hourly/ – 每小时运行一次所有脚本
  • /etc/cron.daily/ – 每天运行一次。
  • /etc/cron.weekly/ – 每周运行一次。
  • /etc/cron.monthly/ – 每月运行一次。

Crontab 语法

# ┌────────────── minute (0 - 59)# | ┌──────────── hour (0 - 23)# | | ┌────────── day of the month (1 - 31)# | | | ┌──────── month (1 - 12)# | | | | ┌────── day of the week (0 - 6) (Sunday to Saturday; 7 is also Sunday on some systems)# | | | | |# | | | | |# | | | | |# * * * * * command to execute

要创立 cron 作业,您须要先理解 cron 的语法和格局。否则,可能无奈正确设置 cron 作业。crontab 语法由具备以下可能值的五个字段组成:

  • Minute. 命令运行的分钟,范畴为 0-59。
  • Hour. 命令运行的小时,范畴为 24 小时制中的 0-23。
  • Day of the month. 用户心愿命令运行的月份的第几天,范畴从 1 到 31。
  • Month. 用户心愿命令运行的月份,范畴从 1-12,代表一月到十二月。
  • Day of the week. 命令在星期几运行,范畴从 0-6,代表星期日-星期六。在某些零碎中,值 7 代表星期日。

不要将任何字段留空。
例如,如果您想设置一个 cron 作业以在每周五下午 5:37 运行,那么您的 cron 命令应该如下所示:

37 17 * * 5

在下面的示例中,37 和 17 代表下午 5:37。 Day of the month 和 Month 字段的星号示意所有可能的值。这意味着无论日期或月份如何,都应反复执行工作。最初,5 代表星期五。

要为您的 cron 命令设置正确的工夫,cron 作业操作员的常识是必不可少的。它们容许您指定要在每个字段中输出的值。您须要在所有 crontab 文件中应用正确的运算符。

  • 星号 (*)。应用此运算符示意字段中的所有可能值。例如,如果您心愿您的 cron 作业每分钟运行一次,请在分钟字段中写一个星号。
  • 逗号 (,)。应用此运算符列出多个值。例如,在 Day of the week 字段中写入 1,5 将安顿工作在每周一和周五执行。
  • 连字符 (-)。应用此运算符来确定值的范畴。例如,如果您想在 6 月到 9 月之间设置一个 cron 作业,则在“月份”字段中写入 6-9 就能够实现这项工作。
  • 分隔器 (/)。示意间隔时间触发(开始工夫/工夫距离)。例如,如果您想让脚本每十二小时运行一次,请在小时字段中写入 */12。
  • 最初 (L)。此运算符可用于Day of the month和Day of the week字段。例如,在 day-of-week 字段中写入 3L 示意该月的最初一个星期三。
  • 工作日 (W)。示意间隔当月给定日期最近的工作日(周一到周五)。例如,如果一个月的 1 号是星期六,则在day-of-month字段中写入 1W 将在接下来的星期一(第 3 号)运行命令。
  • 哈希 (#)。应用此运算符确定星期几,示意该月第n个星期x(x#n),后跟一个 1 到 5 之间的数字。例如,1#2 示意该月的第二个星期一。
  • 问号(?)。应用此运算符为“day of the month”和“day of the week”字段输出“无特定值”。

Cron 作业非凡字符串

非凡字符串用于按工夫距离安顿 cron 作业,而无需用户找出要输出的逻辑数字集。要应用它们,请写一个@,而后写一个简略的短语。
以下是您能够在命令中应用的一些有用的非凡字符串:

  • @hourly 该作业将每小时运行一次。
  • @daily 或者 @midnight 这些字符串将在每天午夜运行工作。
  • @weekly 应用它在周日午夜每周运行一次作业。
  • @monthly 这个非凡的字符串在每个月的第一天运行一次命令。
  • @yearly 应用它在每年 1 月 1 日午夜运行一次工作。
  • @reboot 应用此字符串,作业将仅在启动时运行一次。

Cron 语法示例

当初您曾经理解了正确的 cron 语法,咱们将通过一些示例来帮忙您更好地了解它。

  • 每周日午夜执行一次:

  • 0 0

  • 每周一的每小时执行一次:

        • 1
  • 每天早上 6 点和下午 6 点执行一次:

  • 6,18 *

  • 每 10 分钟执行一次:

    */10 * * * *
  • 每 15 分钟执行一次:

    */15 * * * *
  • 在 7 月 20 日每分钟执行一次:

    • 20 7 *
  • 每个工作日(周一至周五)早晨 10 点执行一次:

  • 22 1-5

  • 每周二午夜执行一次:

  • 0 * 2

  • 在 1 月、2 月和 5 月期间每分钟执行一次:

      • 1,2,5 *
  • 每天早上 5 点 10 分开始到 5 点 59 分完结,每 10 分钟执行一次:

    10-59/10 5 * * *
  • 让工作在每个月的第一天早上 8 点每季度运行一次:

  • 8 1 /3

  • 每小时运行一次:


  • 每分钟运行一次:


  • 每周日凌晨 4:05 运行一次:

  • 4 0

论断

设置主动打算的作业是避免您遗记重要工作的实用解决方案。

Cron 作业是系统管理员和 Web 开发人员治理重复性工作的绝佳形式。须要做的就是输出正确的命令并抉择正确的执行工夫。
要安顿 cron 作业,请在命令行中应用正确的语法。或者,您能够应用非凡字符串来简化该过程。请记住调配适当的权限,以便只有受权用户能力拜访 cron 文件。