首頁  >  文章  >  後端開發  >  基於Python的Cron作業管理

基於Python的Cron作業管理

WBOY
WBOY原創
2023-08-28 11:25:101107瀏覽

基於Python的Cron作業管理

在本教程中,您將了解 cron 作業的重要性以及為什麼需要它們。您將看到 python-crontab,一個與 crontab 互動的 Python 模組。您將學習如何使用 python-crontab 模組從 Python 程式操作 cron 作業。

什麼是 Cron?

在系統管理期間,需要在伺服器上執行後台作業來執行例行任務。 Cron 是一個系統進程,用於定期執行後台任務。 Cron 需要一個名為 crontab 的文件,其中包含要在特定時間執行的任務清單。所有這些作業都在指定時間在背景執行。

要查看系統上執行的 cron 作業,請導航至終端機並輸入:

crontab -l

上述指令顯示 crontab 檔案中的作業清單。若要將新的 cron 作業新增至 crontab,請輸入:

crontab -e

上述指令將顯示 crontab 文件,您可以在其中排程作業。假設您有一個名為 hello.py 的文件,如下所示:

print("Hello World")

現在,要安排一個 cron 作業來執行上述腳本以輸出到另一個文件,您需要新增以下程式碼行:

50 19 * * * python hello.py >> a.txt

上面的程式碼行安排檔案的執行,並將輸出輸出到名為 a.txt 的檔案。要執行的指令之前的數字定義了作業的執行時間。計時語法有五個部分:

  1. 分鐘
  2. 小時
  3. 一月中的某天
  4. 星期幾

計時語法中的星號(*)表示每次都會執行。

Python-Crontab 簡介

python-crontab 是一個 Python 模組,它提供對 cron 作業的訪問,並使我們能夠從 Python 程式操作 crontab 檔案。它會自動執行手動修改 crontab 檔案的過程。要開始使用 python-crontab,您需要使用 pip 安裝模組:

pip install python-crontab

安裝 python-crontab 後,將其匯入 Python 程式。

from crontab import CronTab

寫出你的第一個 Cron 作業

讓我們使用 python-crontab 模組來寫我們的第一個 cron 作業。建立一個名為 writeDate.py 的 Python 程式。在 writeDate.py 中,新增程式碼以將當前日期和時間列印到檔案中。這是 writeDate.py 的外觀:

import datetime

with open('dateInfo.txt','a') as outFile:
    outFile.write('\n' + str(datetime.datetime.now()))

儲存上述變更。

讓我們建立另一個 Python 程序,它將安排 writeDate.py Python 程式每分鐘運行一次。建立一個名為 scheduleCron.py 的檔案。

CronTab 模組匯入到 scheduleCron.py 程式中。

from crontab import CronTab

使用CronTab模組,我們來存取系統crontab

my_cron = CronTab(user='your username')

上述指令建立了使用者對系統 crontab 的存取權。讓我們遍歷 cron 作業,您應該可以看到為特定使用者名稱手動建立的任何 cron 作業。

for job in my_cron:
    print(job)

儲存變更並嘗試執行 scheduleCron.py,您應該擁有特定使用者的 cron 作業清單(如果有)。您應該能夠在執行上述程序時看到類似的內容:

50 19 * * * python hello.py >> a.txt # at 5 a.m every week with:

讓我們繼續使用 CronTab 模組建立一個新的 cron 作業。您可以使用新方法建立一個新的 cron,並指定要執行的命令。

job = my_cron.new(command='python /home/jay/writeDate.py')

正如你在上面這行程式碼中看到的,我已經指定了 cron 作業執行時要執行的命令。一旦有了新的 cron 作業,您就需要安排 cron 作業。

讓我們安排 cron 作業每分鐘運行一次。因此,以一分鐘的間隔,當前日期和時間將被附加到 dateInfo.txt 檔案中。若要安排每分鐘執行一次作業,請新增下列程式碼行:

job.minute.every(1)

排程作業後,您需要將作業寫入 cron 標籤。

my_cron.write()

這是 scheduleCron.py 檔案:

from crontab import CronTab

my_cron = CronTab(user='vaati')
job = my_cron.new(command='python3 /home/Desktop/vaati/writeDate.py')
job.minute.every(1)

my_cron.write()

儲存以上變更並執行Python程式。

python scheduleCron.py

執行後,使用下列指令檢查 crontab 檔案:

crontab -l

上面的指令應該會顯示新加入的 cron 作業。

* * * * * python3 home/vaati/Desktop/writeDate.py

等一下,檢查您的主目錄,您應該可以看到 dateInfo.txt 文件,其中包含當前日期和時間。文件將每分鐘更新一次,當前日期和時間將附加到現有內容中。

更新现有的 Cron 作业

要更新现有的 cron 作业,您需要使用命令或使用 ID 来查找 cron 作业。使用 python-crontab 创建 cron 作业时,可以以注释的形式为 cron 作业设置 Id。以下是如何创建带有注释的 cron 作业:

job = my_cron.new(command='python3 home/vaati/Desktop/writeDate.py', comment='dateinfo')

如上面的代码行所示,已使用注释 dateinfo 创建了一个新的 cron 作业。上述注释可用于查找 cron 作业。

您需要做的是迭代 crontab 中的所有作业,并使用注释 dateinfo 检查作业。这是代码:

 my_cron = CronTab(user='vaati')
 for job in my_cron:
     print(job)

使用 job.comment 属性检查每个作业的评论。

 my_cron = CronTab(user='vaati')
 for job in my_cron:
     if job.comment == 'dateinfo':
         print(job)

完成作业后,重新安排 cron 作业并写入 cron。完整代码如下:

from crontab import CronTab

my_cron = CronTab(user='vaati')
for job in my_cron:
    if job.comment == 'dateinfo':
        job.hour.every(10)
        my_cron.write()
        print('Cron job modified successfully')

保存上述更改并执行 scheduleCron.py 文件。使用以下命令列出 crontab 文件中的项目:

crontab -l

您应该能够看到带有更新的计划时间的 cron 作业。

* */10 * * * python3 /home/Desktop/vaati/writeDate.py # dateinfo

从 Crontab 清除作业

python-crontab 提供了从 crontab 中清除或删除作业的方法。您可以根据计划、注释或命令从 crontab 中删除 cron 作业。

假设您想通过 crontab 中的注释 dateinfo 清除作业。代码是:

from crontab import CronTab

my_cron = CronTab(user='vaati')
for job in my_cron
    if job.comment == 'dateinfo':
        my_cron.remove(job)
        my_cron.write()

同样,要根据评论删除作业,可以直接调用 my_cron 上的 remove 方法,无需任何迭代。这是代码:

my_cron.remove(comment='dateinfo')

要删除 crontab 中的所有作业,可以调用 remove_all 方法。

my_cron.remove_all()

完成更改后,使用以下命令将其写回 cron:

my_cron.write()

计算工作频率

要检查使用 python-crontab 执行作业的次数,您可以使用 Frequency 方法。获得作业后,您可以调用名为 Frequency 的方法,该方法将返回该作业在一年内执行的次数。

from crontab import CronTab

my_cron = CronTab(user='vaati')
for job in my_cron:
    print(job.frequency())

要查看一小时内作业执行的次数,可以使用方法 Frequency_per_hour

my_cron = CronTab(user='vaati')
for job in my_cron:
    print(job.frequency_per_hour())

要查看一天中的作业频率,可以使用方法 Frequency_per_day

检查作业计划

python-crontab 提供了检查特定作业的时间表的功能。为此,您需要在系统上安装 croniter 模块。使用 pip 安装 croniter

pip install croniter

安装 croniter 后,调用作业上的调度方法来获取作业调度。

import datetime

sch = job.schedule(date_from=datetime.datetime.now())

现在您可以使用 get_next 方法获取下一个作业计划。

print(sch.get_next())

完整代码如下:

import datetime
from crontab import CronTab

my_crons = CronTab(user='vaati')
for job in my_crons:
    sch = job.schedule(date_from=datetime.datetime.now())
    print(sch.get_next())

您甚至可以使用 get_prev 方法获取之前的时间表。

总结

在本教程中,您了解了如何开始使用 python-crontab 从 Python 程序访问系统 crontab。使用 python-crontab,您可以自动执行创建、更新和调度 cron 作业的手动过程。

您是否使用过 python-crontab 或任何其他库来访问系统 crontab ?我很想听听你的想法。请在论坛上告诉我们您的建议。

学习Python

无论您是刚刚入门还是希望学习新技能的经验丰富的程序员,都可以通过我们完整的 Python 教程指南学习 Python。

以上是基於Python的Cron作業管理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn