如何使用环境变量使用 apscheduler 设置 cron 之类的计划?
How to use evironment variables to set cron like schedule using apscheduler?
我整理了一个用 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()
有谁知道现在可以解决这个问题吗?谢谢!
设置环境变量并使用 python 读取它的示例(我想这就是您要问的)。
export INTERVAL=5
import os
print(os.environ.get("INTERVAL"))
但是,您可能需要记住以下几点:
- 设置环境变量从一个 OS 到另一个会有所不同
- 确保您设置变量的用户与运行您的流程
相同
- 确保在跨环境移动时配置这些变量的迁移
这里是我如何解决这个问题的:
环境变量(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']))
我整理了一个用 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()
有谁知道现在可以解决这个问题吗?谢谢!
设置环境变量并使用 python 读取它的示例(我想这就是您要问的)。
export INTERVAL=5
import os
print(os.environ.get("INTERVAL"))
但是,您可能需要记住以下几点:
- 设置环境变量从一个 OS 到另一个会有所不同
- 确保您设置变量的用户与运行您的流程 相同
- 确保在跨环境移动时配置这些变量的迁移
这里是我如何解决这个问题的:
环境变量(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']))