使用Python管理Cron作业

本文介绍了如何使用Python模块管理Cron作业。内容包括Cron作业的概念,Python-Crontab的介绍,创建、更新、删除Cron作业的方法,以及如何检查作业的执行频率和时间表。
摘要由CSDN通过智能技术生成

在本教程中,您将了解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作业。 您可以通过使用new方法并指定要执行的命令来创建新的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='roy')
job = my_cron.new(command='python /home/roy/writeDate.py')
job.minute.every(1)

my_cron.write()

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

python scheduleCron.py

一旦执行,请使用以下命令检查crontab文件:

crontab -l

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

* * * * * python /home/roy/writeDate.py

等待一分钟,检查您的主目录,您应该可以看到带有当前日期和时间的dateInfo.txt文件。 该文件将每分钟更新一次,并且当前日期和时间将被附加到现有内容之后。

更新现有的Cron作业

要更新现有的cron作业,您需要使用命令或使用ID查找cron作业。 使用python-crontab创建cron作业时,可以以注释的形式将cd设置为cron作业。 您可以通过以下方法创建带有注释的cron作业:

job = my_cron.new(command='python /home/roy/writeDate.py', comment='dateinfo')

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

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

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

使用job.comment属性检查每个作业的注释。

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

完成工作后,重新计划cron作业并写入cron。 这是完整的代码:

from crontab import CronTab

my_cron = CronTab(user='roy')
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 * * * python /home/jay/writeDate.py # dateinfo

从Crontab清除作业

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

假设您要使用crontab注释dateinfo清除作业。 该代码将是:

from crontab import CronTab

my_cron = CronTab(user='roy')
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方法。 拥有工作后,可以调用名为frequency的方法,该方法将返回一年中工作执行的次数。

from crontab import CronTab

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

要检查一个小时内执行作业的次数,可以使用frequency_per_hour方法。

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

要检查一天中的工作频率,可以使用frequency_per_day方法。

检查作业时间表

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

pip install croniter

一旦安装了croniter ,就在作业上调用schedule方法以获取作业计划。

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

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

print sch.get_next()

这是完整的代码:

import datetime
from crontab import CronTab

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

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

包起来

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

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

学习Python

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

翻译自: https://code.tutsplus.com/tutorials/managing-cron-jobs-using-python--cms-28231

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值