【问题标题】:apscheduler loses a job after reboot重新启动后,apscheduler 失去工作
【发布时间】:2021-09-14 15:07:09
【问题描述】:

我遇到了 python APScheduler 的问题。 我做了一个简单的脚本:

from apscheduler.schedulers.background import BackgroundScheduler
from time import sleep
from datetime import datetime

scheduler = BackgroundScheduler({
    'apscheduler.jobstores.default': {
        'type': 'redis',
        'host': "127.0.0.1",
        'port': 6379,
        'db': 0,
        'encoding': "utf-8",
        'encoding_errors': "strict",
        'decode_responses': False,
        'retry_on_timeout': False,
        'ssl': False,
        'ssl_cert_reqs': "required"
    },
    'apscheduler.executors.default': {
        'class': 'apscheduler.executors.pool:ThreadPoolExecutor',
        'max_workers': '20'
    },
    'apscheduler.job_defaults.coalesce': 'false',
    'apscheduler.job_defaults.max_instances': '3',
    'apscheduler.timezone': 'UTC',
}, daemon=False)
scheduler.start()

def testfunc():
    with open('./data.log', 'a') as f:
        f.write(f'{datetime.now()}\n')

scheduler.add_job(testfunc, 'interval', minutes=1, id='my_job_id')
scheduler.add_job(testfunc, 'date', run_date="2120-1-1 11:12:13", id='my_job_id_2')

while True:
    scheduler.print_jobs()
    sleep(10)

所以,我将 BackgroundScheduler 与 ThreadPoolExecutor 和 Redis 作业存储一起使用,非常简单,如文档中所述。

它工作正常,添加了任务,我也可以在 redis-cli 中看到数据。 然后我重新启动服务器并再次检查redis中的数据。而我看到的只是 my_job_id_2 任务。 interval 触发器的那个完全消失了。 Redis 设置为每分钟将数据保存到 RDB。如果我在重新启动之前在 redis-cli 中执行 SAVE 命令,也会发生同样的情况。

为什么会这样?

【问题讨论】:

    标签: redis python-3.7 apscheduler


    【解决方案1】:

    Redis 是一个内存存储,除非您配置持久性数据将在重新启动之间丢弃。

    https://redis.io/topics/persistence 详细介绍了您可以使用的选项

    【讨论】:

    • 正如我在问题中所说,` Redis 设置为每分钟将数据保存到 RDB。 `。所以,它持久化数据
    【解决方案2】:

    你确定它正在保存吗?

    1. 检查配置
    redis-cli config get save
    1) "save"
    2) "3600 1 300 100 60 10000"
    
    1. 检查 redis 日志以确保已保存
    1:M 16 Sep 2021 16:06:31.375 * DB saved on disk
    

    错误示例

    547130:M 16 Sep 2021 09:12:58.100 # Error moving temp DB file temp-547130.rdb on the final destination dump.rdb (in server root dir /home/namizaru/redis/src): Operation not permitted
    
    1. 确保在重新启动时将文件加载到 redis 日志中
    549156:M 16 Sep 2021 09:14:31.522 * DB loaded from disk: 0.000 seconds
    
    1. 考虑使用 AOF,因为它会记录所有命令,这样您至少能够弄清楚哪些命令被遗漏了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-11
      • 2015-01-12
      • 2021-12-29
      • 2022-07-07
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      相关资源
      最近更新 更多