文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-13 14:59

关注

本文的目的是使用python-crontab库编写Python程序的执行计划。这个库允许你使用API在操作系统中生成crontab文件,而不必使用特定的操作系统命令。

首先,我们安装该库:

poetry add python-crontab

然后,我们创建一个名为create_crontab.py的文件,并包含以下内容:

if __name__ == '__main__':
    cron_tab = CronTab(user=True)

    list_cron(cron_tab)
    delete_cron(cron_tab)
    create_cron(cron_tab)
    list_cron(cron_tab)

列出计划任务

我们将CronTab对象传递给此函数并迭代不同的任务。

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

删除计划任务

在进行更改时,总是强制crontab写入。

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

创建计划任务

假设我们要安排执行位于以下绝对路径的程序:

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

Crontab脚本在后台运行,不在我们的项目内,因此它不知道模块路径。我们需要给它指示:

模块目录的位置

我们可以使用pathlib从create_crontab.py模块文件的相对路径获取项目的根目录:

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

并创建到此目录的目录更改命令链:

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

定义要执行的命令

我们创建执行的初始部分,这将用于任何模块:

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

我们构建了运行每个模块的完整命令(包括目录更改):

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', ' &'])

定义计划任务

现在我们有了命令,使用python-crontab库的new()函数创建计划任务,并用setall设置cron表达式。

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表达式,并找到大量示例。

重启时执行(无需计划)

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

我们还可以使用python-crontab库在重启时启动程序:

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

设置cron任务

我们现在可以从shell安装我们的编程:

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

我们将在屏幕上看到计划任务的列表:

2024-06-07 00:15:46,872 - __main__ - INFO - Crontab configured
59 21 * * *
来源:小白玩转Python内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯