我有一个脚本,每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()
答案 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