列出 apscheduler 安排的 cron 作业

Posted

技术标签:

【中文标题】列出 apscheduler 安排的 cron 作业【英文标题】:List the cron jobs scheduled by apscheduler 【发布时间】:2018-03-09 03:34:21 【问题描述】:

我在脚本中使用Advanced Python Scheduler 模块来安排每月最后一天的工作。我在 CentOS 机器上将这个 python 脚本作为systemd 脚本运行。

from apscheduler.schedulers.blocking import BlockingScheduler

if __name__ == '__main__':
    sched = BlockingScheduler()
    sched.add_job(lambda: my_aggregation_function(url_list, 'monthly'), 'cron', day='last')
    while True:
        sched.start()

我通过添加这些更改重新启动了我的脚本(systemd),并且该脚本现在正在运行计划的作业。

我的问题是如何确认作业是否从我的 python 脚本中安排为按照我的配置运行。我做了一个如下的 cron 列表,但找不到任何已安排的列表。

crontab -u root -l  

也适用于交互式 shell 上的测试作业,

# python
Python 2.7.5 (default, Nov  6 2016, 00:28:07) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from apscheduler.schedulers.blocking import BlockingScheduler
>>> sched = BlockingScheduler()
>>> def job_function():
...     print "Hello World"
... 
>>> sched.add_job(job_function, 'cron', day='last')
<Job (id=c4b232a453dd4b5dbea5ef413d7a8c4d name=job_function)>
>>> sched.start()

我如何查看提到的工作 ID (c4b232a453dd4b5dbea5ef413d7a8c4d) 的详细信息?能不能这样看。

我还查找了另一个模块 python-crontab 用于管理 cron 工作。这也没有列出工作

>>> from crontab import CronTab
>>> my_cron = CronTab(user='root')
>>> for job in my_cron:
...     print job
...

【问题讨论】:

【参考方案1】:

我认为这里存在严重的误解。您似乎认为 APScheduler 以某种方式管理系统的 cron 作业。它不是。它是一个进程内调度程序,恰好有一个类似 cron 的触发器来调度作业。 APScheduler 与任何 cron 守护进程或 crontab 没有任何连接。

更新来自 cmets 的实际答案。 API在apscheduler官方文档中定义

scheduler.get_jobs()

【讨论】:

感谢您的回答(我想是该模块的作者)。我确实证实了您对模块不必对 linux 提供的实际 cron 守护进程做任何事情的看法。但是仅以apscheduler 的角度来看,是不是可以列出预定的作业? 当然可以,使用scheduler.get_jobs() 啊!这么简单的一个!不知道我是如何在文档中错过的。

以上是关于列出 apscheduler 安排的 cron 作业的主要内容,如果未能解决你的问题,请参考以下文章

APScheduler的cron触发器支持到秒级的cron表达式

APScheduler定时任务使用

如何安排一个函数在 Flask 上每小时运行一次?

apscheduler 绿色版

Python APscheduler

Python任务调度模块APScheduler