关于运维:Cron-Job-表达式解析

0次阅读

共计 4270 个字符,预计需要花费 11 分钟才能阅读完成。

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 -u
crontab: option requires an argument -- 'u'
crontab: usage error: unrecognized option
usage:  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 文件。

正文完
 0