Pengurusan kerja Cron berdasarkan Python

WBOY
Lepaskan: 2023-08-28 11:25:10
asal
1124 orang telah melayarinya

Pengurusan kerja Cron berdasarkan Python

Dalam tutorial ini, anda akan mempelajari kepentingan pekerjaan cron dan sebab anda memerlukannya. Anda akan melihat python-crontab, modul Python yang berinteraksi dengan crontab. Anda akan belajar cara menggunakan modul python-crontab untuk mengendalikan kerja cron daripada program Python. python-crontab,一个与 crontab 交互的 Python 模块。您将学习如何使用 python-crontab 模块从 Python 程序操作 cron 作业。

什么是 Cron?

在系统管理期间,需要在服务器上运行后台作业来执行例行任务。 Cron 是一个系统进程,用于定期执行后台任务。 Cron 需要一个名为 crontab 的文件,其中包含要在特定时间执行的任务列表。所有这些作业都在指定时间在后台执行。

要查看系统上运行的 cron 作业,请导航到终端并输入:

crontab -l
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

上述命令显示 crontab 文件中的作业列表。要将新的 cron 作业添加到 crontab,请输入:

crontab -e
Salin selepas log masuk

上述命令将显示 crontab 文件,您可以在其中安排作业。假设您有一个名为 hello.py 的文件,如下所示:

print("Hello World")
Salin selepas log masuk

现在,要安排一个 cron 作业来执行上述脚本以输出到另一个文件,您需要添加以下代码行:

50 19 * * * python hello.py >> a.txt
Salin selepas log masuk

上面的代码行安排文件的执行,并将输出输出到名为 a.txt 的文件。要执行的命令之前的数字定义了作业的执行时间。计时语法有五个部分:

  1. 分钟
  2. 小时
  3. 一月中的某天
  4. 星期几

计时语法中的星号(*)表示每次都会运行。

Python-Crontab 简介

python-crontab 是一个 Python 模块,它提供对 cron 作业的访问,并使我们能够从 Python 程序操作 crontab 文件。它自动执行手动修改 crontab 文件的过程。要开始使用 python-crontab,您需要使用 pip 安装模块:

pip install python-crontab
Salin selepas log masuk

安装 python-crontab 后,将其导入 Python 程序。

from crontab import CronTab
Salin selepas log masuk
Salin selepas log masuk

编写你的第一个 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()))
Salin selepas log masuk

保存上述更改。

让我们创建另一个 Python 程序,它将安排 writeDate.py Python 程序每分钟运行一次。创建一个名为 scheduleCron.py 的文件。

CronTab 模块导入到 scheduleCron.py 程序中。

from crontab import CronTab
Salin selepas log masuk
Salin selepas log masuk

使用CronTab模块,我们来访问系统crontab

my_cron = CronTab(user='your username')
Salin selepas log masuk

上述命令创建了用户对系统 crontab 的访问权限。让我们遍历 cron 作业,您应该能够看到为特定用户名手动创建的任何 cron 作业。

for job in my_cron:
    print(job)
Salin selepas log masuk

保存更改并尝试执行 scheduleCron.py,您应该拥有特定用户的 cron 作业列表(如果有)。您应该能够在执行上述程序时看到类似的内容:

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

让我们继续使用 CronTab 模块创建一个新的 cron 作业。您可以使用新方法创建一个新的 cron,并指定要执行的命令。

job = my_cron.new(command='python /home/jay/writeDate.py')
Salin selepas log masuk

正如你在上面这行代码中看到的,我已经指定了 cron 作业执行时要执行的命令。一旦有了新的 cron 作业,您就需要安排 cron 作业。

让我们安排 cron 作业每分钟运行一次。因此,以一分钟的间隔,当前日期和时间将被附加到 dateInfo.txt 文件中。要安排每分钟执行一次作业,请添加以下代码行:

job.minute.every(1)
Salin selepas log masuk

安排作业后,您需要将作业写入 cron 选项卡。

my_cron.write()
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

这是 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()
Salin selepas log masuk

保存以上更改并执行Python程序。

python scheduleCron.py
Salin selepas log masuk

执行后,使用以下命令检查 crontab 文件:

crontab -l
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

上面的命令应该显示新添加的 cron 作业。

* * * * * python3 home/vaati/Desktop/writeDate.py
Salin selepas log masuk

稍等一下,检查您的主目录,您应该能够看到 dateInfo.txt

Apakah itu Cron?

Semasa pentadbiran sistem, kerja latar belakang perlu dijalankan pada pelayan untuk melaksanakan tugas rutin. Cron ialah proses sistem yang digunakan untuk melaksanakan tugas latar belakang secara tetap. Cron memerlukan fail yang dipanggil crontab yang mengandungi senarai tugasan untuk dilaksanakan pada masa tertentu. Semua kerja ini dilaksanakan di latar belakang pada masa tertentu. 🎜 🎜Untuk melihat kerja cron yang berjalan pada sistem anda, navigasi ke terminal dan masukkan: 🎜
job = my_cron.new(command='python3 home/vaati/Desktop/writeDate.py', comment='dateinfo')
Salin selepas log masuk
Salin selepas log masuk
🎜Arahan di atas memaparkan senarai kerja dalam fail crontab. Untuk menambah tugas cron baharu pada crontab, masukkan: 🎜
 my_cron = CronTab(user='vaati')
 for job in my_cron:
     print(job)
Salin selepas log masuk
Salin selepas log masuk
🎜Arahan di atas akan memaparkan fail crontab di mana anda boleh menjadualkan kerja. Katakan anda mempunyai fail bernama hello.py seperti ini: 🎜
 my_cron = CronTab(user='vaati')
 for job in my_cron:
     if job.comment == 'dateinfo':
         print(job)
Salin selepas log masuk
Salin selepas log masuk
🎜Sekarang, untuk menjadualkan kerja cron untuk melaksanakan skrip di atas untuk output ke fail lain, anda perlu menambah baris kod berikut: 🎜
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')
Salin selepas log masuk
Salin selepas log masuk
🎜Barisan kod di atas menjadualkan pelaksanaan fail dan mengeluarkan output kepada fail bernama a.txt. Nombor sebelum arahan untuk dilaksanakan mentakrifkan bila kerja akan dilaksanakan. Sintaks masa mempunyai lima bahagian: 🎜
  1. Minit
  2. Jam
  3. Sehari dalam bulan Januari
  4. Bulan
  5. Hari dalam seminggu
🎜Asterisk (*) dalam sintaks pemasaan bermakna ia akan dijalankan setiap kali. 🎜

Pengenalan kepada Python-Crontab

🎜python-crontab ialah modul Python yang menyediakan akses kepada kerja cron dan membolehkan kami mengendalikan crontab daripada dokumen program Python. Ia mengautomasikan proses mengubah suai fail crontab secara manual. Untuk mula menggunakan python-crontab anda perlu memasang modul menggunakan pip: 🎜
crontab -l
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
🎜Selepas memasang python-crontab, import ia ke dalam program Python. 🎜
* */10 * * * python3 /home/Desktop/vaati/writeDate.py # dateinfo
Salin selepas log masuk
Salin selepas log masuk

Tulis kerja Cron pertama anda

🎜Mari gunakan modul python-crontab untuk menulis tugas cron pertama kami. Buat program Python yang dipanggil writeDate.py. Dalam writeDate.py, tambahkan kod untuk mencetak tarikh dan masa semasa pada fail. Inilah rupa writeDate.py: 🎜
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()
Salin selepas log masuk
Salin selepas log masuk
🎜Simpan perubahan di atas. 🎜 🎜Mari kita cipta satu lagi program Python yang akan menjadualkan program Python writeDate.py dijalankan setiap minit. Buat fail bernama scheduleCron.py. 🎜 🎜Import modul CronTab ke dalam program scheduleCron.py. 🎜
my_cron.remove(comment='dateinfo')
Salin selepas log masuk
Salin selepas log masuk
🎜Menggunakan modul CronTab, kami mengakses sistem crontab. 🎜
my_cron.remove_all()
Salin selepas log masuk
Salin selepas log masuk
🎜Arahan di atas mencipta akses pengguna kepada sistem crontab. Mari kita ulangi kerja cron dan anda seharusnya dapat melihat sebarang tugas cron yang dibuat secara manual untuk nama pengguna tertentu. 🎜
my_cron.write()
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
🎜Simpan perubahan dan cuba laksanakan scheduleCron.py dan anda harus mempunyai senarai tugas cron untuk pengguna tertentu (jika ada). Anda sepatutnya dapat melihat sesuatu seperti ini apabila melaksanakan prosedur di atas: 🎜
from crontab import CronTab

my_cron = CronTab(user='vaati')
for job in my_cron:
    print(job.frequency())
Salin selepas log masuk
Salin selepas log masuk
🎜Mari teruskan dan buat kerja cron baharu menggunakan modul CronTab. Anda boleh menggunakan kaedah baharu untuk mencipta cron baharu dan tentukan arahan untuk dilaksanakan. 🎜
my_cron = CronTab(user='vaati')
for job in my_cron:
    print(job.frequency_per_hour())
Salin selepas log masuk
Salin selepas log masuk
🎜Seperti yang anda lihat dalam baris kod di atas, saya telah menentukan arahan untuk dilaksanakan apabila tugas cron dilaksanakan. Sebaik sahaja anda mempunyai tugas cron baharu, anda perlu menjadualkan tugas cron. 🎜 🎜Mari jadualkan kerja cron untuk dijalankan setiap minit. Oleh itu, pada selang satu minit, tarikh dan masa semasa akan dilampirkan pada fail dateInfo.txt. Untuk menjadualkan kerja untuk melaksanakan setiap minit, tambah baris kod berikut: 🎜
pip install croniter
Salin selepas log masuk
Salin selepas log masuk
🎜Selepas menjadualkan kerja, anda perlu menulis kerja pada tab cron. 🎜
import datetime

sch = job.schedule(date_from=datetime.datetime.now())
Salin selepas log masuk
Salin selepas log masuk
🎜Ini ialah fail scheduleCron.py: 🎜
print(sch.get_next())
Salin selepas log masuk
Salin selepas log masuk
🎜Simpan perubahan di atas dan laksanakan program Python. 🎜
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())
Salin selepas log masuk
Salin selepas log masuk
🎜Selepas pelaksanaan, semak fail crontab menggunakan arahan berikut: 🎜 rrreee 🎜Arahan di atas harus menunjukkan tugas cron yang baru ditambah. 🎜 rrreee 🎜Tunggu sebentar dan semak direktori rumah anda, anda sepatutnya dapat melihat fail dateInfo.txt, yang mengandungi tarikh dan masa semasa. Fail akan dikemas kini setiap minit dan tarikh dan masa semasa akan dilampirkan pada kandungan sedia ada. 🎜

更新现有的 Cron 作业

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

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

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

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

 my_cron = CronTab(user='vaati')
 for job in my_cron:
     print(job)
Salin selepas log masuk
Salin selepas log masuk

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

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

完成作业后,重新安排 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')
Salin selepas log masuk
Salin selepas log masuk

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

crontab -l
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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

* */10 * * * python3 /home/Desktop/vaati/writeDate.py # dateinfo
Salin selepas log masuk
Salin selepas log masuk

从 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()
Salin selepas log masuk
Salin selepas log masuk

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

my_cron.remove(comment='dateinfo')
Salin selepas log masuk
Salin selepas log masuk

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

my_cron.remove_all()
Salin selepas log masuk
Salin selepas log masuk

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

my_cron.write()
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

计算工作频率

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

from crontab import CronTab

my_cron = CronTab(user='vaati')
for job in my_cron:
    print(job.frequency())
Salin selepas log masuk
Salin selepas log masuk

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

my_cron = CronTab(user='vaati')
for job in my_cron:
    print(job.frequency_per_hour())
Salin selepas log masuk
Salin selepas log masuk

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

检查作业计划

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

pip install croniter
Salin selepas log masuk
Salin selepas log masuk

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

import datetime

sch = job.schedule(date_from=datetime.datetime.now())
Salin selepas log masuk
Salin selepas log masuk

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

print(sch.get_next())
Salin selepas log masuk
Salin selepas log masuk

完整代码如下:

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())
Salin selepas log masuk
Salin selepas log masuk

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

总结

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

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

学习Python

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

Atas ialah kandungan terperinci Pengurusan kerja Cron berdasarkan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan