使用 Python 管理 Cron 定时任务

在这里,我们将深入探讨 Cron 任务的重要性,并了解为什么我们需要它们。在本教程中,我们将一同研究 python-crontab,这是一个 Python 模块,它允许我们直接与 crontab 进行交互和操作。

什么是 Cron 和 Crontab?

Cron 是一个强大的工具,它使用户能够按照预定的时间表自动运行脚本、命令或应用程序。所谓的 Crontab 文件,则包含了一份由 Corn(注:原文如此,通常指 Cron 守护进程)执行的任务列表。

CronJobs 在行业中应用非常广泛,主要用于自动调度一些重要且强制性的任务,例如抓取股票数据、定期更新数据库、生成并发送报告等。

运行以下命令即可安装该模块:

pip3 install python-crontab

!install-crontab安装 python-crontab

安装完软件包后,我们现在可以使用它来管理 cronjobs——无论是创建新的定时任务、更新现有任务,还是删除任务。要将其导入到我们的 Python 程序中,我们可以这样做:

from crontab import CronTab

使用 Cron 调度任务

Cron 使用调度表达式(schedule expressions)来了解我们希望在何时执行任务。CronJobs 的调度规范是根据 cron 实用程序的规则来指定的。它由如下符号组成:

> *

从最左边开始,第一个星号代表分钟(0 到 59 之间),第二个星号代表小时(0 到 24 之间),第三个代表一个月中的某一天,第四个代表一年中的某一个月,第五个代表一周中的某一天。

CRON 调度表达式

任务频率可以通过 cron 表格格式计算得出,这也是 cron job 的设置方式。为了更好地解释这一点,这里有几个例子:

  • /2 :这将每 2 分钟运行一次
  • 0 /8 1-6* :这将从周一到周六每 8 小时运行一次
  • jan,feb :仅在 1 月和 2 月运行
  • 0 4 * :每天凌晨 4 点运行

在 Crontab 中创建你的第一个 Cron 任务

这里有一些 Crontab 命令的示例:

> crontab -l # 列出所有 cronjobs

>

>

> crontab -e # 编辑 cronjob

>

>

> crontab -r # 删除 cronjobs

从 Crontab 中清除任务

我们可以使用 crontab 通过单个命令清除所有 cron 任务:

> crontab -r

下图演示了这一过程

!Cron Jobs Using Python正在删除 cron 任务

检查任务调度

我们可以通过运行以下命令找到 cronjobs 的调度情况:

> crontab -l

它将给出 cron 作业的所有详细信息,包括名称、调度和命令。

!Cron Jobs Using Python检查任务调度

检查 cron 作业的有效性

Cron 会在 Syslog 中记录每次执行命令的尝试。我们可以通过在 syslog 中 grep 命令名称来验证我们的作业是否调度正确。我们只需要运行这个命令:

> grep /home/Desktop/freeMemory.py /var/log/syslog

如果 cron 作业有效且没有错误地执行,这将返回一个成功的响应;如果由于某种原因失败,它将返回错误。此外,这在每次作业运行后都会刷新输出。

!Cron Jobs Using Python通过 grep syslog 检查 cron 作业有效性

使用 Python 和 subprocess 创建新的 Cronjob

例如,我们想要一个任务,每 1 小时后告诉我们当前使用了多少内存以及剩余多少内存。我们首先需要创建一个作业文件来执行此操作:

Python3


CODEBLOCK_f9931bc2

这段代码使用了 Python 中的 "subprocess" 模块。该模块帮助我们创建/生成新进程并运行它们——如果我们想在 Python 代码中运行一些 Linux 命令,主要会用到它。在这个程序中,我们想运行 "free" 这个 Linux 命令。这个命令能让我们知道系统此刻的内存统计信息。因此,我们使用 subprocess 模块运行这个命令,并将其输出存储在一个文件——"memoryInfo.txt" 中。

用于运行 Linux 命令的函数是 – check_output(command)。它接受命令字符串作为参数,并在运行后返回命令的标准输出。

以下是它将写入文件的内容:

![Screenshot-from-2023-06-17-21-58-37.png](https://media.geeksforgeeks.org/wp-content/uploads/2

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/43772.html
点赞
0.00 平均评分 (0% 分数) - 0