Python脚本时间表可在每月的第一天凌晨2:00运行

时间:2019-07-26 13:32:55

标签: python python-2.7 scheduling

我有一个脚本,每30分钟运行一次,但是有一部分我只想在每月的凌晨2:00运行。我在Python中使用schedule,但不知道如何在当月的第一天进行设置。

month似乎不在schedule的已定义参数中,无法执行类似schedule.every().month.at("02:00").do(job2)

的操作

有什么建议吗?我正在使用python 2.7

简化代码:

from safe_schedule import SafeScheduler
import time

def job():
    print "I'm working...",
    return

def scheduler():
    # Schedule every30min routines
    print 'Starting Scheduler'
    scheduler = SafeScheduler()
    scheduler.every(30).minutes.do(job)
    #scheduler.every().month.at("02:00").do(job2)

    while True:
        scheduler.run_pending()
        time.sleep(1)


if __name__ == '__main__':
     scheduler()

3 个答案:

答案 0 :(得分:2)

图书馆的主要贡献者不赞成这种事情,请参见https://github.com/dbader/schedule/issues/73#issuecomment-167758653

但是,如果有人坚持的话,可以安排日常工作,但只有在每月的第一天才运行。

from datetime import date

from safe_schedule import SafeScheduler


def job2():
    if date.today().day != 1:
        return

    # actual job body


scheduler = SafeScheduler()
scheduler.every().day.at("02:00").do(job2)

其中一个问题注释https://github.com/dbader/schedule/issues/73#issuecomment-356769023中描述了另一种替代方法。

答案 1 :(得分:1)

编辑:
他们在项目的许多问题中都提到了这一点,但是似乎还没有一个干净的解决方案。另外,整个项目似乎不再活跃,因此我认为该功能不会很快实现。

IMO,您需要手动检查当前日期是否是工作中的月份的第一天。

原始答案(这是错误的):

我看了看文档,对了,没提到月份:
https://schedule.readthedocs.io/en/stable/api.html#schedule.Scheduler

但是该项目存在一个仅提及以下内容的问题:
https://github.com/dbader/schedule/issues/73

您可以这样做:

scheduler.every().day.if(lambda d,t: d.day == 1 and t.hour == 2).do(x)

答案 2 :(得分:0)

在这里,我没有提到Windows Task Scheduler,但是,如果您使用Windows,那肯定可以为您工作。

https://www.digitalcitizen.life/how-create-task-basic-task-wizard

enter image description here