如何使用环境变量使用apscheduler设置cron如计划?

问题描述

我整理了用Python编写的ETL作业。我必须在不同的环境(LOCAL,DEV,TST,PROD)中运行它,因此我需要找到一种使用环境变量来设置作业计划的方法,这样我就可以为每个环境设置不同的计划,而无需接触一个环境中的代码。另一个。今天我正在使用apscheduler。我在代码中有这样的东西:

from apscheduler.schedulers.blocking import BlockingScheduler

def etl_job():


sched = BlockingScheduler(daemon=True)
sched.add_job(etl_job,'interval',minutes=7)
sched.start()

现在有人知道要解决这个问题吗?谢谢!

解决方法

设置env变量并使用python读取它的示例(我想这就是您要的内容)。

export INTERVAL=5

import os
print(os.environ.get("INTERVAL"))

但是,您可能想记住的几件事:

  • 将环境变量从一个操作系统设置为另一个操作系统
  • 确保您为运行该进程的用户设置了变量
  • 确保在跨环境移动时预配置这些变量的迁移
,

这是我如何解决这个问题的:

环境变量(json格式)

schedule='{"jobsSchedule": [{"job_name": "job_1","schedule": "*/1 * * * *"},{"job_name":"job_2","schedule": "*/2 * * * *"}]}'

读取环境变量

jobCrontabSchedule = json.loads(os.getenv('schedule'))

安排每一项工作

for job in jobCrontabSchedule['jobsSchedule']:
    print ("Scheduling the job: "+job['job_name']+" with the schedule: "+job['schedule'])   
    sched.add_job(globals()[job['job_name']],CronTrigger.from_crontab(job['schedule']))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...