在特定时间触发python脚本

时间:2015-09-07 04:49:17

标签: python git cron

我试图在python中构建一种作业系统。这构成了一个前端网页,允许人们安排在x时间运行的作业。然后,PHP将包含它的运行时间的作业写入数据库。我然后在我的服务器上运行一个python cronjob,它将每30分钟检查一次是否有新工作。如果有,它将触发一个计划脚本,以便在开始之前倒计时到事件/作业的确切分钟。

可以在https://github.com/dbader/schedule找到用于调度程序的脚本。它看起来像一个非常好的脚本,我在另一个SO页面上找到它。但是 - 通过PIP安装后,该模块似乎无法正常工作?

尝试运行计划脚本 - Python引擎崩溃:     schedule.today.at(' 14:38&#39)做(作业)。 我只需要运行一次性调度程序,可以重复使用它同时安排多个作业。这些工作很可能在下周的同一时间重复,因此我喜欢计划模块。

这是我在GIT上找到的几个片段构建的示例代码:

import schedule
import time

def job():
    # Do some work ...

    print("Hello World")
    return schedule.CancelJob

#schedule.every(10).seconds.do(job)
schedule.today.at('14:38').do(job)

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

如果其他人遇到同样的问题 - 或者对如何实现这个问题有其他想法 - 请告诉我!!

1 个答案:

答案 0 :(得分:1)

查看主分支上的源代码,schedule不会公开名为today的属性。如果您已经看到一个使用这样一个属性的示例,那么问题似乎就是您所在的库的版本已被删除。

不幸的是,如果您的主要要求是能够安排一次性任务,那么这个库看起来不太合适。

修改

没有today属性,因此常见问题解答中提到的代码段无法直接使用,但您应该能够挽救它的基本概念:

def job_that_executes_once():
    # Do some work ...
    return schedule.CancelJob

schedule.every().day().at('14:38').do(job_that_executes_once)

编辑2

可能有用:“只做一次这个工作”装饰。

from functools import wraps

import schedule


def do_once(func):
    @wraps(func)
    def wrapped(*args, **kwargs):
        func(*args, **kwargs)
        return schedule.CancelJob
    return wrapped

@do_once
def some_one_off_job():
    # Do some work
    # No need to return schedule.CancelJob
    print 5

@do_once
def some_other_one_off_job():
    # hooray, decorators!
    pass

schedule.every().day().at('14:38').do(some_one_off_job)
schedule.every().day().at('14:38').do(some_other_one_off_job)