当前位置:首页 > 科技  > 软件

任务自动化 :用 Python 创建 Crontab 任务

来源: 责编: 时间:2024-06-12 17:29:34 234观看
导读如果你不知道Crontab是什么,它是一个用于Unix和类Unix操作系统的实用工具,允许你在特定时间自动安排和执行任务。Crontab的一个很大优势是,它在崩溃或重启后仍然有效。Crontab条目保存在由cron守护进程读取的文件中,该守

如果你不知道Crontab是什么,它是一个用于Unix和类Unix操作系统的实用工具,允许你在特定时间自动安排和执行任务。Crontab的一个很大优势是,它在崩溃或重启后仍然有效。Crontab条目保存在由cron守护进程读取的文件中,该守护进程在系统启动时自动启动。wKw28资讯网——每日最新资讯28at.com

wKw28资讯网——每日最新资讯28at.com

本文的目的是使用python-crontab库编写Python程序的执行计划。这个库允许你使用API在操作系统中生成crontab文件,而不必使用特定的操作系统命令。wKw28资讯网——每日最新资讯28at.com

首先,我们安装该库:wKw28资讯网——每日最新资讯28at.com

poetry add python-crontab

然后,我们创建一个名为create_crontab.py的文件,并包含以下内容:wKw28资讯网——每日最新资讯28at.com

if __name__ == '__main__':    cron_tab = CronTab(user=True)    list_cron(cron_tab)    delete_cron(cron_tab)    create_cron(cron_tab)    list_cron(cron_tab)
  • cron_tab = CronTab(user=True): 我们创建一个与当前用户crontab关联的CronTab对象。这将允许我们访问和操作计划任务。
  • list_cron(cron_tab): 我们将创建一个名为list_cron的函数,用于在屏幕上显示所有计划任务的列表。 
  • delete_cron(cron_tab): 我们将创建一个函数,用于在创建计划任务之前从crontab中删除所有计划任务。这一步在更新计划定义时非常有用。 
  • create_cron(cron_tab): 我们将实现一个create_cron函数,用于创建新的计划任务并将它们添加到crontab中。

wKw28资讯网——每日最新资讯28at.com

列出计划任务

我们将CronTab对象传递给此函数并迭代不同的任务。wKw28资讯网——每日最新资讯28at.com

def list_cron(cron): for job in cron:     print(job)

wKw28资讯网——每日最新资讯28at.com

删除计划任务

在进行更改时,总是强制crontab写入。wKw28资讯网——每日最新资讯28at.com

def delete_cron(cron): cron.remove_all() cron.write()

wKw28资讯网——每日最新资讯28at.com

创建计划任务

假设我们要安排执行位于以下绝对路径的程序:wKw28资讯网——每日最新资讯28at.com

/Users/xavierescudero/Projects/tutorial-trading-bot/tutorial_trading_bot/exchange_historical_importer.py

Crontab脚本在后台运行,不在我们的项目内,因此它不知道模块路径。我们需要给它指示:wKw28资讯网——每日最新资讯28at.com

  • 进入根目录:cd /Users/xavierescudero/Projects/tutorial-trading-bot
  • 在Poetry管理的虚拟环境中运行模块:poetry run -m tutorial_trading_bot.exchange_historical.importer
  • 使用-m选项,Python会在系统搜索目录和当前目录中查找模块,导入它,并像独立脚本文件一样运行它。

wKw28资讯网——每日最新资讯28at.com

模块目录的位置

我们可以使用pathlib从create_crontab.py模块文件的相对路径获取项目的根目录:wKw28资讯网——每日最新资讯28at.com

from pathlib import PathPROJECT_DIR_PATH = str(Path(__file__).parent.parent)

并创建到此目录的目录更改命令链:wKw28资讯网——每日最新资讯28at.com

CD_PROJECT_DIR_COMMAND = ''.join(['cd ', PROJECT_DIR_PATH])

wKw28资讯网——每日最新资讯28at.com

定义要执行的命令

我们创建执行的初始部分,这将用于任何模块:wKw28资讯网——每日最新资讯28at.com

EXECUTOR_COMMAND = ' '.join(['poetry', 'run python -m tutorial_trading_bot.'])

我们构建了运行每个模块的完整命令(包括目录更改):wKw28资讯网——每日最新资讯28at.com

EXECUTOR_PATH = ';'.join([CD_PROJECT_DIR_COMMAND, EXECUTOR_COMMAND])HISTORICAL_IMPORTER_JOB = ''.join([EXECUTOR_PATH, 'exchange_historical_importer', ' &'])TRADING_BOT_JOB = ''.join([EXECUTOR_PATH, 'trading_bot', ' &'])

wKw28资讯网——每日最新资讯28at.com

定义计划任务

现在我们有了命令,使用python-crontab库的new()函数创建计划任务,并用setall设置cron表达式。wKw28资讯网——每日最新资讯28at.com

def create_cron(cron): """ Check crontab values using https://crontab.guru """ cron.new(command=HISTORICAL_IMPORTER_JOB).setall('59 21 * * *') # At 21:59 every day cron.new(command=TRADING_BOT_JOB).setall('59 22 * * *') cron.write()

在网站https://crontab.guru上,你可以验证你的cron表达式,并找到大量示例。wKw28资讯网——每日最新资讯28at.com

wKw28资讯网——每日最新资讯28at.com

重启时执行(无需计划)

当你不在家时,发现Python进程在重启后没有重新启动是一件糟糕的事。这可能很令人沮丧,因为这意味着你的自动化任务或服务没有运行。wKw28资讯网——每日最新资讯28at.com

我们还可以使用python-crontab库在重启时启动程序:wKw28资讯网——每日最新资讯28at.com

cron.new(command=TRADING_BOT_JOB).every_reboot()

wKw28资讯网——每日最新资讯28at.com

设置cron任务

我们现在可以从shell安装我们的编程:wKw28资讯网——每日最新资讯28at.com

poetry run python -m tutorial-trading-bot.create_crontab

我们将在屏幕上看到计划任务的列表:wKw28资讯网——每日最新资讯28at.com

2024-06-07 00:15:46,872 - __main__ - INFO - Crontab configured59 21 * * *

本文链接:http://www.28at.com/showinfo-26-93356-0.html任务自动化 :用 Python 创建 Crontab 任务

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Fiddler:一个大名鼎鼎的私藏工具

下一篇: Toga 模块实战:Python GUI 开发轻松上手!

标签:
  • 热门焦点
  • K60至尊版刚预热 一加Ace2 Pro正面硬刚

    Redmi这边刚如火如荼的宣传了K60 Ultra的各种技术和硬件配置,作为竞品的一加也坐不住了。一加中国区总裁李杰发布了两条微博,表示在自家的一加Ace2上早就已经采用了和PixelWo
  • 中兴AX5400Pro+上手体验:再升级 双2.5G网口+USB 3.0这次全都有

    2021年11月的时候,中兴先后发布了两款路由器产品,中兴AX5400和中兴AX5400 Pro,从产品命名上就不难看出这是隶属于同一系列的,但在外观设计上这两款产品可以说是完全没一点关系
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 到手价3099元起!iQOO Neo8 Pro今日首销:安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
  • OPPO K11搭载高性能石墨散热系统:旗舰同款 性能凉爽释放

    日前OPPO官方宣布,将于7月25日14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼
  • 英特尔Xe-HP项目终止,将专注Xe-HPC/HPG系列显卡

    据10 月 31 日消息报道,英特尔高级副总裁兼加速计算系统和图形事业部总经理 表示,Xe-HP“ Arctic Sound” 系列服务器 GPU 已经应用于 oneAPI devcloud 云服
  • “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主“七王”在群里介绍一些刷单赚
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top