Python 脚本计划在每个月的第 1 天 2:00 上午 运行

Python script schedule to run on day 1 of each month at 2:00 am

我有一个脚本,每 30 分钟 运行s,但有一个部分我只想 运行 在每月的第一天 2:00 上午。我在 Python 中使用 schedule,但我不知道如何将其设置为每月的第 1 天。

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()

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

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)

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

然而,如果有人坚持,可以安排每天的工作,但 运行 只有当月 1 日才可以。

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

我在这里没有看到任何关于 Windows 任务计划程序的提及,但是如果您使用 Windows,那肯定对您有用。

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