使用 cron 调度任务

[ad_1]

Cron 是一个调度守护进程,它以指定的时间间隔执行任务。 这些任务称为 cron 作业,主要用于自动执行系统维护或管理任务。 例如,您可以设置一个 cron 作业来自动执行重复性任务,例如备份数据库或数据、使用最新的安全补丁更新系统、检查磁盘空间使用情况、发送电子邮件等。 cron 作业可以安排为按分钟、小时、每月的某天、每月、每周的某天或这些的任意组合运行。

cron的一些优点

以下是使用 cron 作业的一些优势:

  • 您可以更好地控制您的作业何时运行,即您可以控制它何时执行的分钟、小时、日期等。
  • 它消除了为任务的循环和逻辑编写代码的需要,您可以在不再需要执行作业时将其关闭。
  • 作业在不执行时不会占用您的内存,因此您可以节省内存分配。
  • 如果某个作业由于某种原因未能执行并退出,它将在适当的时候再次运行。

安装 cron 守护进程

幸运的是 Fedora Linux 预先配置为运行重要的系统任务以保持系统更新。 有几个实用程序可以运行任务,例如 cron、anacron、at 和批处理。 本文将只关注 cron 实用程序的安装。 Cron 与 cronie 软件包一起安装,该软件包也提供了 cron 服务。

要确定软件包是否已经存在,请使用 rpm 命令:

$ rpm -q cronie
 Cronie-1.5.2-4.el8.x86_64

如果安装了 cronie 软件包,它将返回 cronie 软件包的全名。 如果您的系统中没有该软件包,它会说该软件包未安装。
要安装,请键入:

$ dnf install cronie

运行 cron 守护进程

cron 作业由 crond 服务根据配置文件中的信息执行。 但是,在将作业添加到配置文件之前,需要启动 crond 服务,或者在某些情况下安装它。 什么是crond? crond 是 cron 守护进程(crond)的压缩名称。 要确定 crond 服务是否正在运行,请键入以下命令:

$ systemctl status crond.service
● crond.service - Command Scheduler
      Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor pre>
      Active: active (running) since Sat 2021-03-20 14:12:35 PDT; 1 day 21h ago
    Main PID: 1110 (crond)

如果您没有看到类似的内容,包括“Active: active (running) since…”行,您将必须启动 crond 守护进程。 要在当前会话中运行 crond 服务,请输入以下命令:

$ systemctl start crond.service

要将服务配置为在引导时自动启动,请键入以下内容:

$ systemctl enable crond.service

如果出于某种原因,您希望停止 crond 服务的运行,请按如下方式使用 stop 命令:

$ systemctl stop crond.service

要重新启动它,只需使用重新启动命令:

$ systemctl restart crond.service

定义 cron 作业

cron配置

以下是 cron 作业的配置详细信息示例。 这定义了一个简单的 cron 作业来将 git master 分支的最新更改拉入克隆的存储库:

*/59 * * * * username cd /home/username/project/design && git pull origin master

有两个主要部分:

  • 第一部分是“*/59 * * * *”。 这是计时器设置为每 59 分钟的地方。
  • 该行的其余部分是命令,因为它将从命令行运行。
    此示例中的命令本身包含三个部分:
    • 作业将作为用户“用户名”运行
    • 它将更改为目录 /home/username/project/design
    • git 命令运行以拉取 master 分支中的最新更改。

计时语法

如上所述,计时信息是 cron 作业字符串的第一部分。 这决定了 cron 作业运行的频率和时间。 它按顺序由 5 个部分组成:

  • 分钟
  • 小时
  • 每月的一天
  • 一周中的天

这是解释语法的更图形化的方式,可以在这里看到:

 .---------------- minute (0 - 59)
 |  .------------- hour (0 - 23)
 |  |  .---------- day of month (1 - 31)
 |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr …
 |  |  |  |  .---- day of week (0-6) (Sunday=0 or 7)
 |  |  |  |  |            OR sun,mon,tue,wed,thr,fri,sat
 |  |  |  |  |               
 *  *  *  *  *  user-name  command-to-be-executed 

使用 星号

星号

可以用来代替数字来表示该位置的所有可能值。 例如,分钟位置的星号将使其每分钟运行一次。 以下示例可能有助于更好地理解语法。

* * * * * [command] 

这个 cron 作业将每分钟运行一次:

*/5 * * * * [command]

斜线 (/) 表示多个分钟数 以下示例每小时运行 12 次,即每 5 分钟一次:

0 0 2 * * [command]

下一个示例将在每月的第二天午夜运行一次(例如,1 月 2 日凌晨 12:00、2 月 2 日凌晨 12:00 等):

使用 crontab 创建 cron 作业

Cron 作业在后台运行并不断检查 /etc/crontab 文件以及 /etc/cron.*/ 和 /var/spool/cron/ 目录。 每个用户在 /var/spool/cron/ 中都有一个唯一的 crontab 文件。

这些 cron 文件不应直接编辑。 crontab 命令是您用来创建、编辑、安装、卸载和列出 cron 作业的方法。

$ crontab -e

相同的 crontab 命令用于创建和编辑 cron 作业。 更酷的是,您无需在创建新文件或编辑现有文件后重新启动 cron。 这将打开您现有的 crontab 文件或在必要时创建一个。 vi 编辑器在调用 crontab -e 时默认打开。 注意:要使用 Nano 编辑器编辑 crontab 文件,您可以选择设置编辑

=纳米环境变量。

$ crontab -l
$ crontab -u username -l

如果需要,使用选项 -l 列出所有 cron 作业并使用 -u 选项指定用户。

$ crontab -r

使用以下命令删除或清除所有的 cron 作业:

$ crontab -r -u username

要删除特定用户的作业,您必须以 root 用户身份运行以下命令:

感谢您的阅读。 cron 作业可能看起来像是系统管理员专用的工具,但它们实际上与多种 Web 应用程序和用户任务相关。

Fedora 参考 Linux 文档

自动化任务

[ad_2]

Related Posts