如何在Linux上使用Cron:提示、技巧和示例

Cron作业是Linux操作系统中一个基本但功能强大的工具。这些基于时间的作业调度器对于系统管理员、开发人员和技术爱好者来说都是必不可少的,可以实现日常任务的自动化。

本文旨在揭开cron作业的神秘面纱。它提供了一个全面的指南,解释了什么是cron作业,它们是如何工作的,最重要的是,如何使用它们来自动化Linux系统上的重复任务。

因此,无论您的目标是设置自动备份文件、在特定时间运行脚本,还是自动化您的个人项目,本文都将向您展示cron作业是如何实现这一切的。所以,让我们一起潜水吧!

克朗是什么?

Cron是类Unix操作系统(包括Linux和macOS)中基于时间的作业调度程序。它允许用户安排作业(命令或脚本)以固定的时间、日期或间隔定期运行。

它最常用于自动执行系统维护或管理任务,但也可用于任何需要定期执行命令的目的。

Cron的工作原理

后台的核心组件是名为crond的cron守护进程。它的主要工作是检查计划任务,并在指定时间到达时执行这些任务。

守护进程每分钟唤醒一次,以检查crontab文件或基于目录的配置中的作业。这自然将我们带到Cron的下一个关键方面,它支撑着它的操作设置——它使用的文件和目录。

Cron文件和目录

Crontab文件是cron作业调度系统的核心。“Crontab”代表“cron-table”,因为这些文件包含要在计划时间运行的命令列表。

crontab文件中的每一行都表示一个单独的作业,并包括关于何时运行作业以及要执行的命令的信息。

从本质上讲,crontab文件有两种:由个人用户拥有的和系统范围内的“
/etc/crontab
”。以下是您应该注意的关于这两个方面的关键细节。

但在此之前,有一些重要的事情需要澄清。属于单个用户的cron文件不保存在其主目录中,而是在“
/var/spool/cron
目录同时,系统服务和应用程序的cron作业文件通常放置在“
/etc/cron。d
 “.

用户Crontabs

用户crontab对系统上的每个用户都是个人的。用户可以使用自己的crontab文件在用户ID下安排任务。

用户crontab的主要优点是允许单个用户管理其作业计划,而不需要管理权限。

系统范围Crontab

与特定于用户的crontab文件不同,“
/etc/crontab
”是一个系统范围的配置文件。它遵循与用户crontab稍有不同的格式,包括一个用户字段,该字段指定运行命令的用户帐户。

这允许系统管理员安排作业在任何用户下运行,而无需修改该用户的crontab,从而在不同用户帐户之间的任务管理中具有更大的灵活性。

一般来说,“
/etc/crontab
“文件通常用于需要以管理权限运行或对系统操作至关重要的作业。

另一个重要点是,虽然用户可以编辑他们的crontab条目,但系统范围内的crontab只能由根用户直接编辑。

Cron的目录

除了crontab文件外,大多数Linux系统还包括一组由cron扫描以查找计划作业的目录:“
/etc/cron.daily
,” “
/etc/cron.hourly
,” “
/etc/cron.weekly

/etc/cron.monthly
.”

这些目录允许对需要定期运行的任务进行更直接的调度,而无需在crontab中指定确切的时间。

放置在这些目录中的脚本和可执行文件分别每天、每小时、每周或每月运行一次。执行这些目录中的脚本的确切时间由中的配置决定
/etc/crontab
或守护程序的配置文件,通常位于
/etc/cron.d/
.”

Cron语法基础

cron作业由cron文件(crontab)中的一行文本定义。每一行都由一系列字段组成,这些字段由空格或制表符分隔,后面跟着要执行的命令或脚本。cron作业的基本语法如下:

分钟小时日期月份日期星期命令执行
Cron作业的结构

让我们深入研究每个组件:

分钟(0-59)

此字段指定命令运行的分钟数。它可以是0到59之间的值。例如,将其设置为0将在一小时开始时运行该命令。

小时(0-23)

小时字段以24小时格式指定。它决定在一天中的哪个时间执行命令。例如,将其设置为14将在下午2点运行命令。

月日(1-31)

此字段指定命令将在一个月的哪一天运行。它可以是1到31之间的任何值,具体取决于一个月中的天数。例如,将其设置为1将在每个月的第一天运行该命令。

月份(1-12)

月份字段确定命令将在哪个月份执行。它可以是从1(1月)到12(12月)的值。例如,将其设置为12将在12月执行该命令。

星期几(0-6)

此字段指定命令应在一周中的哪一天运行。它可以是0(星期日)到6(星期六)之间的值。例如,将其设置为5将在每周五运行该命令。

命令或脚本

最后,命令或脚本字段是指定cron作业应执行的操作的位置。这可以是cron守护进程将在指定时间执行的任何命令或脚本文件的路径。

Cron语法中的特殊字符

Cron语法还支持特殊字符来指定更复杂的调度模式:

  • 星号
    :表示“每”个时间单位。例如,小时字段中的“*”表示“每小时”
  • 逗号
    :允许指定值列表。例如,day_of_week字段中的“1,3,5”表示“在周一、周三和周五运行”
  • 连字符
    :指定一个值范围。例如,小时字段中的“9-17”表示“从上午9点到下午5点的每小时”
  • 斜线
    :指定增量。例如,分钟字段中的“*/10”表示“每10分钟”

除此之外,cron作业还有特殊的快捷字符串,可以替换时间和日期的五个字段。这些快捷方式提供了一种快速的方式来指定需要数字表示的相同明细表。

一串 意思
@重新启动
运行指定的命令一次
启动时
.
每年的

@每年
两者都运行指定的任务
每年
1月1日上午12:00。相当于指定“0 0 1 1*”
月刊
运行作业
每月一次
,1日上午12:00。相当于“0 0 1**”
每周的
运行作业
一周一次
周日上午12:00。相当于“0 0**0”
每日的

午夜
两者都运行cronjob
每一天
这相当于在crontab文件中指定“0 0***”。
@每小时
在的顶部运行作业
每小时
.相当于“0***”

Cron作业何时开始?

cron系统每分钟对crontab运行一次检查。当设置的时间(分钟、小时和月)与实际时间一致时,它会运行任务。此外,它还会检查日期:如果月中的特定日期或星期几与今天匹配,那么是时候执行命令或脚本了。

Cron作业和路径

当cron作业运行时,它是在受限制的环境中运行的,这意味着它不会自动继承用户或系统的环境变量或路径。这可能会导致cron作业失败的问题,因为它由于未定义或不正确的路径而找不到必要的可执行文件或脚本。

有鉴于此,您可以在crontab文件中显式设置PATH环境变量,以处理cron作业中的路径。这告诉cron守护进程在哪里查找可执行文件。例如

路径=
/usr/
箱子
/bin:/u
sr/sbin:
/sbin:/u
sr/local/bin
代码语言:
 JavaScript
 (
javascript
)