在本教程中,您将了解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
的文件中。 要执行的命令前的数字定义了作业的执行时间。 计时语法包括五个部分:
- 分钟
- 小时
- 一个月中的某天
- 月
- 星期几
时间语法中的星号(*)表示它将每次运行。
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