APScheduler没有开始?

时间:2011-04-29 18:00:41

标签: python scheduler

我想在夜间运行python脚本,所以我想使用APScheduler。我将在第二天晚上1点开始运行它,它将每晚运行一次

我的调度程序脚本如下所示(scheduler.py):

from apscheduler.scheduler import Scheduler
from datetime import datetime, timedelta, time, date

def myScript():
    print "ok"

if __name__ == '__main__':
    sched = Scheduler()
    startDate = datetime.combine(date.today() + timedelta(days=1),time(1))
    sched.start()
    sched.add_interval_job(myScript, start_date = startDate, days=1)

在shell中,我这样做: python myScheduler.py & disown(我正在远程运行它,因此我想在后台运行它并将其取消。 紧接着,行下方会出现一个数字(PID),就像其他每个python脚本一样。但是当我做ps -e | grep python,那个数字不存在。我试着做kill -9 PID,我收到一条消息说这份工作不存在。

调度程序是否正在运行?如果是,我怎么能阻止它?如果没有,我做错了什么?

5 个答案:

答案 0 :(得分:18)

你必须在sched.add_interval_job(myScript, start_date = startDate, days=1)之后保持脚本运行,脚本结束并停止。 添加一个

import time

while True:
    time.sleep(10)
sched.shutdown()

之后,然后,调度程序仍然存在。

答案 1 :(得分:8)

正确的解决方案是告诉调度程序不要作为守护程序运行:

sched = Scheduler()
sched.daemonic = False

sched = Scheduler()
sched.configure({'apscheduler.daemonic': False})

答案 2 :(得分:3)

这是我的方式:

from apscheduler.scheduler import Scheduler
def mainjob():
    print("It works!")

if __name__ == '__main__':
    sched = Scheduler()
    sched.start()
    sched.add_interval_job(mainjob,minutes=1)
    input("Press enter to exit.")
    sched.shutdown()

答案 3 :(得分:2)

如果使用版本2.1.0,还可以将standalone = True参数传递给Scheduler构造函数。可以找到详细文档here

from apscheduler.scheduler import Scheduler
from datetime import datetime, timedelta, time, date

def myScript():
    print "ok"

if __name__ == '__main__':
    sched = Scheduler(standalone=True)
    startDate = datetime.combine(date.today() + timedelta(days=1),time(1))
    sched.add_interval_job(myScript, start_date = startDate, days=1)
    sched.start()

答案 4 :(得分:2)

我安装了apscheduler v3,这就是我要做的。

from apscheduler.schedulers.background import BackgroundScheduler  
def mainjob():
    print("It works!")

if __name__ == '__main__':
    sched = BackgroundScheduler()
    sched.start()
    sched.add_job(mainjob, 'interval', seconds=120)
    input("Press enter to exit.")
    sched.shutdown()