Cron Job 表达式解析

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

一遍又一遍地执行相同的任务可能会很麻烦。 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 可以执行的一些基本操作:

  1. chenjing@LAPTOP-IH0640SI:~$ crontab -u
  2. crontab: option requires an argument -- 'u'
  3. crontab: usage error: unrecognized option
  4. usage: crontab [-u user] file
  5. crontab [ -u user ] [ -i ] { -e | -l | -r }
  6. (default operation is replace, per 1003.2)
  7. -e (edit user's crontab)
  8. -l (list user's crontab)
  9. -r (delete user's crontab)
  10. -i (prompt before deleting user's crontab)

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

  1. crontab -e

如果在您的系统中没有找到 crontab 文件,该命令将自动创建一个新文件。 crontab -e 允许您添加、编辑和删除 cron 作业。

你需要一个像 vi 或 nano 这样的文本编辑器来编辑 crontab 文件。 第一次输入 crontab -e 时,系统会要求您选择要使用哪个文本编辑器来编辑文件。

要查看系统中活动的计划任务列表,请输入以下命令:

  1. crontab -l

如果您的系统有多个用户,您可以通过以超级用户身份输入以下命令来查看他们的 crontab 文件列表:

  1. crontab -u username -l

您还可以通过键入以下 crontab 命令轻松编辑其他用户的计划作业:

  1. sudo su crontab -u username -e

要给自己 root 权限,请将 sudo su 附加到命令的开头。 一些命令,包括这个命令,只能由 root 用户执行。

最后,要删除 crontab 文件中的所有计划任务并重新开始,请键入以下命令:

  1. crontab -r

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

  1. 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 语法

  1. # ┌────────────── minute (0 - 59)
  2. # | ┌──────────── hour (0 - 23)
  3. # | | ┌────────── day of the month (1 - 31)
  4. # | | | ┌──────── month (1 - 12)
  5. # | | | | ┌────── day of the week (0 - 6) (Sunday to Saturday; 7 is also Sunday on some systems)
  6. # | | | | |
  7. # | | | | |
  8. # | | | | |
  9. # * * * * * 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 命令应该如下所示:

  1. 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 语法,我们将通过一些示例来帮助您更好地理解它。

  • 每周日午夜执行一次:
  1. 0 0 * * 0
  • 每周一的每小时执行一次:
  1. 0 * * * 1
  • 每天早上 6 点和下午 6 点执行一次:
  1. 0 6,18 * * *
  • 每 10 分钟执行一次:
  1. */10 * * * *
  • 每 15 分钟执行一次:
  1. */15 * * * *
  • 在 7 月 20 日每分钟执行一次:
  1. * * 20 7 *
  • 每个工作日(周一至周五)晚上 10 点执行一次:
  1. 0 22 * * 1-5
  • 每周二午夜执行一次:
  1. 0 0 * * * 2
  • 在 1 月、2 月和 5 月期间每分钟执行一次:
  1. * * * 1,2,5 *
  • 每天早上 5 点 10 分开始到 5 点 59 分结束,每 10 分钟执行一次:
  1. 10-59/10 5 * * *
  • 让任务在每个月的第一天早上 8 点每季度运行一次:
  1. 0 8 1 */3 *
  • 每小时运行一次:
  1. 0 * * * *
  • 每分钟运行一次:
  1. * * * * *
  • 每周日凌晨 4:05 运行一次:
  1. 5 4 * * 0

结论

设置自动计划的作业是防止您忘记重要任务的实用解决方案。

Cron 作业是系统管理员和 Web 开发人员管理重复性任务的绝佳方式。需要做的就是输入正确的命令并选择正确的执行时间。

要安排 cron 作业,请在命令行中使用正确的语法。或者,您可以使用特殊字符串来简化该过程。请记住分配适当的权限,以便只有授权用户才能访问 cron 文件。

Cron Job 表达式解析的更多相关文章

  1. cron(CronTrigger)表达式用法

    CronTrigger CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表.CronTr ...

  2. java字符串应用之表达式解析器

    一.表达式的组成    1.数字    2.运算符:+ - / * ^ % =    3.圆括号    4.变量二.运算符优先级    由高到低分别为:+-(正负号).^.*/%.+-.=    优先 ...

  3. 基于Java的简易表达式解析工具(一)

    最近需要用到相关表达式解析的工具,然后去网上搜索,找到了一个用C#写的表达式解析工具,仔细看了功能后发现,这正是我需要的,如果我能将它改造成基于Java语言的方式,岂不是更好吗,所以花了一段时间,把网 ...

  4. 基于Java的简易表达式解析工具(二)

    之前简单的介绍了这个基于Java表达式解析工具,现在把代码分享给大家,希望帮助到有需要的人们,这个分享代码中依赖了一些其他的类,这些类大家可以根据自己的情况进行导入,无非就是写字符串处理工具类,日期处 ...

  5. Java 表达式解析(非原创)

    因项目需要,在网上找来一套表达式解析方法,由于原来的方法太过于零散,不利于移植,现在整理在同一文件内: 文件中包含5个内部类,源码如下: import java.util.ArrayList; imp ...

  6. 【手撸一个ORM】第六步、对象表达式解析和Select表达式解析

    说明 一个Orm自然不仅仅包含条件表达式,还会有如下的场景: OrderBy(s => s.StudentName) Select<StudentDto>(s => new S ...

  7. SpringEl表达式解析

    应用场景: 1.用户日志 2.缓存处理 3........... import org.springframework.expression.EvaluationContext; import org ...

  8. Windows下的Crontab表达式解析DLL的使用

    Linux的crontab工具特别的好用,正好现在工作总有好多定时执行的事 用Windows的定时任务觉得特别Low,哈哈,用C#写个任务触发器 然后再用上Crontab表达式解析DLL,觉得马上就高 ...

  9. Spring 缓存注解 SpEL 表达式解析

    缓存注解上 key.condition.unless 等 SpEL 表达式的解析 SpEl 支持的计算变量: 1)#ai.#pi.#命名参数[i 表示参数下标,从 0 开始] 2)#result:Ca ...

  10. SPEL 表达式解析

    Spring Expression Language 解析器 SPEL解析过程 使用 ExpressionParser 基于 ParserContext 将字符串解析为 Expression, Exp ...

随机推荐

  1. 快速上手系列:JavaScript进阶

    一.基础 1.在firbug调试器的控制台输出内容. function(){ console.log() } 2.argument.没有形参也可表示传进来的参数,用数组表示,如argument[0], ...

  2. r-nacos v0.4.0版本发布

    r-nacos是一个用 rust重新实现的nacos. r-nacos比java实现的nacos更轻量.快速.稳定:合适在开发.测试.受资限服务等环境平替nacos服务使用. r-nacos v0.4 ...

  3. Shell脚本关闭Nginx进程

    [root@testapp ~]# ps -ef | grep nginx root 25265 25216 0 09:22 pts/0 00:00:00 grep --color=auto ngin ...

  4. Oracle 几种行转列的方式 sum+decode sum+case when pivot

    原始数据: 方式一: select t_name, sum(decode(t_item, 'item1', t_num, 0)) item1, sum(decode(t_item, 'item2', ...

  5. KingbaseES数据库-生产环境慢查询性能优化案例

    一.背景 在生产环境中,慢查询不仅影响系统.业务的正常处理.同时严重影响用户的使用感受. 二.表相关信息 2.1 表结构及索引: Table "yktcore.t_dtl_ymt" ...

  6. urllib+BeautifulSoup爬取并解析2345天气王历史天气数据

    urllib+BeautifulSoup爬取并解析2345天气王历史天气数据 网址:东城历史天气查询_历史天气预报查询_2345天气预报 1.代码 import json import logging ...

  7. C++简单实现vector

    向量 向量是序列容器,表示可以更改大小的数组. 就像数组一样,向量对其元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针上的偏移量来访问其元素,并且与数组一样高效.但与数组不同的是,它们的 ...

  8. OpenHarmony社区运营报告(2023年8月)

      本月快讯 ● 2023年8月3日,OpenAtom OpenHarmony(以下简称"OpenHarmony")发布了Beta2版本.OpenHarmony 4.0 Beta2 ...

  9. 全面的开发者文档和用户目标解析:API 文档指南和开发者旅程

    开发者文档 开发者文档,也称为 API 文档,是一种专门针对软件开发人员的技术写作形式.这种类型的文档通常包括 API 的技术规范.代码注释.软件设计和架构以及软件开发中涉及的其他详细技术描述.开发者 ...

  10. C# 发布你的程序包到Nuget

    1.新建一个.NET Standard 的类库项目 2.选择项目属性,在 package 栏目下填写我们的nuget包信息 3.选择我们的项目,点击"Pack" 打包 主要注意的是 ...