crontab定时任务详细讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
crontab定时任务详细讲解
crontab
crontab的服务进程名为crond,英⽂意为周期任务。
crontab在Linux主要⽤于周期定时任务管理。
通常安装操作系统后,默认已启动crond服务。
crontab可理解为cron_table,表⽰cron的任务列表。
类似crontab的⼯具还有at和anacrontab,但具体使⽤场景不同。
corntab⽤途
定时清理垃圾⽂件
定时系统检测
定时数据采集
定时⽇志备份
定时更新数据缓存
定时⽣成报表
corntab安装
# centos
yum install crontabs
⽇常命令
启动服务: /sbin/service crond start
关闭服务: /sbin/service crond stop
重启服务: /sbin/service crond restart
重新载⼊配置: /sbin/service crond reload
查看crontab服务状态:service crond status
⼿动启动crontab服务:service crond start
快速新建crontab任务
$ crontab -e // 打开crontab任务编辑
# 然后在最后⼀⾏添加以下内容
* * * * * date >> /tmp/time.txt
# 按ctral+x 然后按y 再按回车键就可以
上述的意思每过⼀分钟就会忘/tmp/time.txt 写⼊当前时间
等⼏分钟后,可以⽤以下命令查看⽂件:
$ cat /tmp/time.txt
Fri Feb 26 18:59:01 CST 2021
Fri Feb 26 19:00:01 CST 2021
Fri Feb 26 19:01:01 CST 2021
Fri Feb 26 19:02:01 CST 202
crontab语法
crontab [ -u user ] file
或者
crontab [ -u user ] { -l | -r | -e }
说明:
crontab 是⽤来让使⽤者在固定时间或固定间隔执⾏程序之⽤,换句话说,也就是类似使⽤者的时程表。
参数说明:
-e : 执⾏⽂字编辑器来设定时程表,内定的⽂字编辑器是 VI,如果你想⽤别的⽂字编辑器,则请先设定 VISUAL 环境变数来指定使⽤那个⽂字编辑器(⽐如说 setenv VISUAL joe)
-r : 删除某⽤户的所有任务列表,
-l : 显⽰某⽤户的所有任务列表
-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(⽐如说是 root)才能够指定他⼈的时程表。
如果不使⽤ -u user 的话,就是表⽰设定⾃⼰的时程表。
-c dir 指定crontab的⽬录
file [-u user]-⽤指定的⽂件替代⽬前的crontab。
cron的调度⽂件
1. crontab
2. cron.d
3. cron.daily
4. cron.hourly
5. cron.monthly
6. cron.weekly
如果⽤的任务不是以hourly monthly weekly⽅式执⾏,则可以将相应的crontab写⼊到crontab 或cron.d⽬录中。
时间格式如下:
f1 f2 f3 f4 f5 program
参数说明
f1 是表⽰分钟,每时第⼏分钟,范围为0-59;
f2 表⽰⼩时,每天第⼏⼩时,范围为0-23;
f3 表⽰⽇,每⽉第⼏天,范围为1-31;
f4 表⽰⽉份,每年第⼏⽉,范围为1-12;
f5 表⽰星期,表⽰每星期第⼏天,范围0-7,0与7表⽰星期⽇,其他分别为星期1-6
program 表⽰要执⾏的程序
⾼级⽤法
当 f1 为 * 时表⽰每分钟都要执⾏ program,f2 为 * 时表⽰每⼩时都要执⾏程序,其馀类推
当 f1 为 a-b 时表⽰从第 a 分钟到第 b 分钟这段时间内要执⾏,f2 为 a-b 时表⽰从第 a 到第 b ⼩时都要执⾏,其馀类推
当 f1 为 */n 时表⽰每 n 分钟个时间间隔执⾏⼀次,f2 为 */n 表⽰每 n ⼩时个时间间隔执⾏⼀次,其馀类推
当 f1 为 a, b, c,... 时表⽰第 a, b, c,... 分钟要执⾏,f2 为 a, b, c,... 时表⽰第 a, b, c...个⼩时要执⾏,其馀类推
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期⼏ (0 - 6) (星期天为0)
| | | +---------- ⽉份 (1 - 12)
| | +--------------- ⼀个⽉中的第⼏天 (1 - 31)
| +-------------------- ⼩时 (0 - 23)
+------------------------- 分钟 (0 - 59)
corntab任务配置
crontab任务列表配置格式,⽰例⽂件如下:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 更多细节 man 4 crontabs
# 计划任务定义的例⼦:
# .---------------- 分 (0 - 59)
# | .------------- 时 (0 - 23)
# | | .---------- ⽇ (1 - 31)
# | | | .------- ⽉ (1 - 12)
# | | | | .---- 星期 (0 - 7) (星期⽇可为0或7)
# | | | | |
# * * * * * 执⾏的命令
* * * * * date >> /time.txt 2>&1
从上⾯的⽰例⽂件可看出,crontab的任务列表主要由两部分组成:环境变量配置与定时任务配置。
corntab环境变量配置部分
理解环境变量配置这部分可以帮助我们减少去踩⼀些不必要的坑。
简单说明上⾯涉及的环境变量。
SHELL为/bin/bash,表⽰使⽤/bin/bash解释执⾏命令
PATH表⽰到哪些⽬录路径寻找命令程序,此环境变量的值说明了为什么我们在crontab中执⾏命令时,尽量要写命令全路径才能执⾏的原因。
MAILTO变量作⽤是当任务执⾏有输出时,内容发送到哪个⽤户的邮箱。
禁⽤可以设置MAILTO=""。
当我们在使⽤crontab时,发现某些定时任务不能顺利执⾏,但shell控制台执⾏成功,环境变量是否正确是我们需要⾸先关注的点之⼀。
具体详情可以看后⾯关于环境变量坑的说明。
样例
1. 每个⼯作⽇(Mon – Fri) 11:59 p.m 都进⾏备份作业。
59 11 * * 1,2,3,4,5 /root/bin/backup.sh
下⾯例⼦与上⾯的例⼦效果⼀样:
59 11 * * 1-5 /root/bin/backup.sh
2. 每5分钟运⾏⼀次命令
*/5 * * * * /root/bin/check-status.sh
3. 每个⽉的第⼀天 1:10 p.m 运⾏
10 13 1 * * /root/bin/full-backup.sh
4. 每天早上7点执⾏⼀次 /bin/ls :
0 7 * * * /bin/ls
5. 在 12 ⽉内, 每天的早上 6 点到 12 点中,每隔3个⼩时执⾏⼀次 /usr/bin/backup :
0 6-12/3 * 12 * /usr/bin/backup
6. 周⼀到周五每天下午 5:00 寄⼀封信给 jack@ :
0 17 * * 1-5 mail -s "hi" jack@ < /tmp/maildata
7. 每⽉每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执⾏ echo "haha"
20 0-23/2 * * * echo "haha"
8. 晚上11点到早上7点之间,每隔⼀⼩时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
9. 每⽉的4号与每周⼀到周三的11点重启apache
tsim_area_signal_vissim
10. 每半⼩时同步⼀下时间
*/30 * * * * /usr/sbin/ntpdate 210.72.145.20
11. 晚上11点到早上7点之间,每隔⼀⼩时重启nginx
0 11 4 * mon-wed /etc/init.d/nginx restart
12. 每晚的21:30重启 nginx
30 21 * * * /etc/init.d/nginx restart
13. 每1分钟执⾏⼀次command
* * * * * command
启动cron进程的⽅法:
/etc/init.d/crond start
开机就启动cron进程的设置命令:
chkconfig --add crond
验证⼯具:
⽇志打开
crontab默认不输出⽇志信息,所以需要⼿动打开输出⽇志
sudo vi /etc/rsyslog.d/50-default.conf
打开⽂件,在⽂件中找到cron.*,把前⾯的#去掉,保存退出,输⼊
重启⽇志系统
sudo service rsyslog restart
然后稍等⼀会就可以在/var/log⽬录下看到cron.log,vi cron.log就可以查看cron运⾏⽇志了。
查看⽇志
sudo tail -n 10 /var/log/cron.log
参考⽂章:
介绍:
APScheduler的全称是Advanced Python Scheduler。
它是⼀个轻量级的 Python 定时任务调度框架。
APScheduler ⽀持三种调度任务:固定时间间隔,固定时间点(⽇期),Linux 下的 Crontab 命令。
同时,它还⽀持异步执⾏、后台执⾏调度任务。
安装:
pip install apscheduler
基本概念
1. APScheduler四⼤组件:
触发器 triggers :⽤于设定触发任务的条件
任务储存器 job stores:⽤于存放任务,把任务存放在内存或数据库中
执⾏器 executors:⽤于执⾏任务,可以设定执⾏模式为单线程或线程池
调度器 schedulers:把上⽅三个组件作为参数,通过创建调度器实例来运⾏
1.1 触发器 triggers
触发器包含调度逻辑。
每个任务都有⾃⼰的触发器,⽤于确定何时应该运⾏作业。
除了初始配置之外,触发器完全是⽆状态的。
1.2 任务储存器 job stores
默认情况下,任务存放在内存中。
也可以配置存放在不同类型的数据库中。
如果任务存放在数据库中,那么任务的存取有⼀个序列化和反序
列化的过程,同时修改和搜索任务的功能也是由任务储存器实现。
注意⼀个任务储存器不要共享给多个调度器,否则会导致状态混乱
1.3 执⾏器 executors
任务会被执⾏器放⼊线程池或进程池去执⾏,执⾏完毕后,执⾏器会通知调度器。
1.4 调度器 schedulers
⼀个调度器由上⽅三个组件构成,⼀般来说,⼀个程序只要有⼀个调度器就可以了。
开发者也不必直接操作任务储存器、执⾏器以及触发器,因为调度器提供了统⼀的接⼝,通过调度器就可以操作组件,⽐如任务的增删改查。
调度器⼯作流程:
2. 调度器组件详解
根据开发需求选择相应的组件,下⾯是不同的调度器组件:
BlockingScheduler 阻塞式调度器:适⽤于只跑调度器的程序。
BackgroundScheduler 后台调度器:适⽤于⾮阻塞的情况,调度器会在后台独⽴运⾏。
AsyncIOScheduler AsyncIO调度器,适⽤于应⽤使⽤AsnycIO的情况。
GeventScheduler Gevent调度器,适⽤于应⽤通过Gevent的情况。
TornadoScheduler Tornado调度器,适⽤于构建Tornado应⽤。
TwistedScheduler Twisted调度器,适⽤于构建Twisted应⽤。
QtScheduler Qt调度器,适⽤于构建Qt应⽤。
2.1 任务储存器的选择
要看任务是否需要持久化。
如果你运⾏的任务是⽆状态的,选择默认任务储存器MemoryJobStore就可以应付。
但是,如果你需要在程序关闭或重启时,保存任务的状态,那么就要选择持久化的任务储存器。
如果,作者推荐使⽤SQLAlchemyJobStore并搭配PostgreSQL作为后台数据库。
这个⽅案可以提供强⼤的数据整合与保护功能。
2.2 执⾏器的选择
同样要看你的实际需求。
默认的ThreadPoolExecutor线程池执⾏器⽅案可以满⾜⼤部分需求。
如果,你的程序是计算密集型的,那么最好⽤ProcessPoolExecutor进程池执⾏器⽅案来充分利⽤多核算⼒。
也可以将ProcessPoolExecutor作为第⼆执⾏器,混合使⽤两种不同的执⾏器。
配置⼀个任务,就要设置⼀个任务触发器。
触发器可以设定任务运⾏的周期、次数和时间。
3. APScheduler有三种内置的触发器:
date ⽇期:触发任务运⾏的具体⽇期
interval 间隔:触发任务运⾏的时间间隔
cron 周期:触发任务运⾏的周期
calendarinterval:当您想要在⼀天中的特定时间以⽇历为基础的间隔运⾏任务时使⽤
⼀个任务也可以设定多种触发器,⽐如,可以设定同时满⾜所有触发器条件⽽触发,或者满⾜⼀项即触发。
3.0 触发器代码⽰例
3.1 date 是最基本的⼀种调度,作业任务只会执⾏⼀次。
它表⽰特定的时间点触发。
它的参数如下:
参数说明
run_date(datetime or str)任务运⾏的⽇期或者时间
timezone(datetime.tzinfo or str)指定时区
from datetime import date
from apscheduler.schedulers.blocking import BlockingScheduler
scheduler = BlockingScheduler()
def my_job(text):
print(text)
# 在2019年4⽉15⽇执⾏
scheduler.add_job(my_job, 'date', run_date=date(2019, 4, 15), args=['测试任务'])
scheduler.start()
###########################################################################################
import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
scheduler = BlockingScheduler()
def my_job(text):
print(text)
# datetime类型(⽤于精确时间)
scheduler.add_job(my_job, 'date', run_date=datetime(2019, 4, 15, 17, 30, 5), args=['测试任务'])
scheduler.start()
注意:run_date参数可以是date类型、datetime类型或⽂本类型。
scheduler.add_job(my_job, 'date', run_date='2009-11-06 16:30:05', args=['测试任务'])
3.2 interval 周期触发任务
固定时间间隔触发。
interval 间隔调度,参数如下:
参数说明
weeks(int)间隔⼏周
days(int)间隔⼏天
hours(int)间隔⼏⼩时
minutes(int)间隔⼏分钟
seconds(int)间隔多少秒
start_date(datetime or str)开始⽇期
end_date(datetime or str)结束⽇期
timezone(datetime.tzinfo or str)时区
from datetime import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
def job_func():
print("当前时间:", datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")
scheduler = BlockingScheduler()
# 每2⼩时触发
scheduler.add_job(job_func, 'interval', hours=2)
# 在 2019-04-15 17:00:00 ~ 2019-12-31 24:00:00 之间, 每隔两分钟执⾏⼀次 job_func ⽅法
scheduler .add_job(job_func, 'interval', minutes=2, start_date='2019-04-15 17:00:00' , end_date='2019-12-31 24:00:00') scheduler.start()
jitter振动参数,给每次触发添加⼀个随机浮动秒数,⼀般适⽤于多服务器,避免同时运⾏造成服务拥堵。
# 每⼩时(上下浮动120秒区间内)运⾏`job_function`
scheduler.add_job(job_func, 'interval', hours=1, jitter=120)
3.3 cron 触发器
在特定时间周期性地触发,和Linux crontab格式兼容。
它是功能最强⼤的触发器。
cron 参数:
参数说明
year(int or str)年,4位数字
month(int or str)⽉(范围1-12)
day(int or str)⽇(范围1-31)
week(int or str)周(范围1-53)
day_of_week(int or str)周内第⼏天或者星期⼏(范围0-6或者
mon,tue,wed,thu,fri,stat,sun)
hour(int or str)时(0-23)
minute(int or str)分(0-59)
second(int or str)秒(0-59)
start_date(datetime or str)最早开始⽇期(含)
end_date(datetime or str)最晚结束⽇期(含)
timezone(datetime.tzinfo or str)指定时区
表达式类型
表达式参数类型描述
*所有通配符。
例:minutes=*即每分钟触发
*/a所有可被a整除的通配符。
a-b所有范围a-b触发
a-b/c所有范围a-b,且可被c整除时触发
xth y⽇第⼏个星期⼏触发。
x为第⼏个,y为星期⼏
last x⽇⼀个⽉中,最后个星期⼏触发
last⽇⼀个⽉最后⼀天触发
x,y,z所有组合表达式,可以组合确定值或上⽅的表达式
注意:month和day_of_week参数分别接受的是英语缩写jan– dec 和 mon – sun
import datetime
from apscheduler.schedulers.background import BackgroundScheduler
def job_func(text):
print("当前时间:", datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])
scheduler = BackgroundScheduler()
# 在每年 1-3、7-9 ⽉份中的每个星期⼀、⼆中的 00:00, 01:00, 02:00 和 03:00 执⾏ job_func 任务
scheduler .add_job(job_func, 'cron', month='1-3,7-9',day='0, tue', hour='0-3')
scheduler.start()
使⽤ scheduled_job() 装饰器添加任务:
@scheduler.scheduled_job('cron', id='my_job_id', day='last sun')
def some_decorated_task():
print("I am printed at 00:00:00 on the last Sunday of every month!")
注意:夏令时问题
有些timezone时区可能会有夏令时的问题。
这个可能导致令时切换时,任务不执⾏或任务执⾏两次。
避免这个问题,可以使⽤UTC时间,或提前预知并规划好执⾏的问题。
pri# 在Europe/Helsinki时区, 在三⽉最后⼀个周⼀就不会触发;在⼗⽉最后⼀个周⼀会触发两次
sched.add_job(job_function, 'cron', hour=3, minute=30)
4. 配置调度程序
APScheduler提供了许多不同的⽅法来配置调度程序。
您可以使⽤配置字典,也可以将选项作为关键字参数传递。
您还可以先实例化调度程序,然后添加任务并配置调度程序。
这样您就可以在任何环境中获得最⼤的灵活性
可以在BaseScheduler类的API引⽤中找到调度程序级别配置选项的完整列表。
调度程序⼦类还可以具有其各⾃API引⽤中记录的其他选项。
各个任务存储和执⾏程序的配置选项同样可以在其API参考页⾯上找到。
假设您希望在应⽤程序中使⽤默认作业存储和默认执⾏程序运⾏BackgroundScheduler:
from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
# 初始化程序
这将为您提供⼀个BackgroundScheduler,其MemoryJobStore(内存任务储存器)名为“default”,ThreadPoolExecutor(线程池执⾏器)名为“default”,默认最⼤线程数为10。
假如你现在有这样的需求,两个任务储存器分别搭配两个执⾏器;同时,还要修改任务的默认参数;最后还要改时区。
可以参考下⾯例⼦,它们是完全等价的。
名称为“mongo”的MongoDBJobStore
名称为“default”的SQLAlchemyJobStore
名称为“ThreadPoolExecutor ”的ThreadPoolExecutor,最⼤线程20个
名称“processpool”的ProcessPoolExecutor,最⼤进程5个
UTC时间作为调度器的时区
默认为新任务关闭合并模式()
设置新任务的默认最⼤实例数为3
⽅法⼀:
from pytz import utc
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.mongodb import MongoDBJobStore
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
jobstores = {
'mongo': MongoDBJobStore(),
'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')
}
executors = {
'default': ThreadPoolExecutor(20),
'processpool': ProcessPoolExecutor(5)
}
job_defaults = {
'coalesce': False,
'max_instances': 3
}
scheduler = BackgroundScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone=utc)⽅法⼆:
from apscheduler.schedulers.background import BackgroundScheduler
# The "apscheduler." prefix is hard coded
scheduler = BackgroundScheduler({
'apscheduler.jobstores.mongo': {
'type': 'mongodb'
},
'apscheduler.jobstores.default': {
'type': 'sqlalchemy',
'url': 'sqlite:///jobs.sqlite'
},
'apscheduler.executors.default': {
'class': 'apscheduler.executors.pool:ThreadPoolExecutor',
'max_workers': '20'
},
'apscheduler.executors.processpool': {
'type': 'processpool',
'max_workers': '5'
},
'apscheduler.job_defaults.coalesce': 'false',
'apscheduler.job_defaults.max_instances': '3',
'apscheduler.timezone': 'UTC',
})
⽅法三:
from pytz import utc
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.executors.pool import ProcessPoolExecutor
jobstores = {
'mongo': {'type': 'mongodb'},
'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')
}
executors = {
'default': {'type': 'threadpool', 'max_workers': 20},
'processpool': ProcessPoolExecutor(max_workers=5)
}
job_defaults = {
'coalesce': False,
'max_instances': 3
}
scheduler = BackgroundScheduler()
# ..这⾥可以添加任务
scheduler.configure(jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone=utc)
启动调度器
启动调度器是只需调⽤start()即可。
除了BlockingScheduler,⾮阻塞调度器都会⽴即返回,可以继续运⾏之后的代码,⽐如添加任务等。
对于BlockingScheduler,程序则会阻塞在start()位置,所以,要运⾏的代码必须写在start()之前。
注意:调度器启动后,就不可以修改配置。
5. 添加任务
添加任务⽅法有两种:
1. 通过调⽤add_job()
2. 通过装饰器scheduled_job()
5.1 利弊:
第⼀种⽅法是最常⽤的;第⼆种⽅法是最⽅便的,但缺点就是运⾏时,不能修改任务。
第⼀种add_job()⽅法会返回⼀个apscheduler.job.Job实例,这样就可以在运⾏时,修改或删除任务。
在任何时候你都能配置任务。
但是如果调度器还没有启动,此时添加任务,那么任务就处于⼀个暂存的状态。
只有当调度器启动时,才会开始计算下次运⾏时间。
还有⼀点要注意,如果你的执⾏器或任务储存器是会序列化任务的,那么这些任务就必须符合:
回调函数必须全局可⽤
回调函数参数必须也是可以被序列化的
重要提醒!
如果在程序初始化时,是从数据库读取任务的,那么必须为每个任务定义⼀个明确的ID,并且使⽤replace_existing=True,否则每次重启程序,你都会得到⼀份新的任务拷贝,也就意味着任务的状态不会保存。
内置任务储存器中,只有MemoryJobStore不会序列化任务;内置执⾏器中,只有ProcessPoolExecutor会序列化任务。
建议:如果想要⽴刻运⾏任务,可以在添加任务时省略trigger参数
6. 移除任务
如果想从调度器移除⼀个任务,那么你就要从相应的任务储存器中移除它,这样才算移除了。
有两种⽅式:
调⽤remove_job(),参数为:任务ID,任务储存器名称
在通过add_job()创建的任务实例上调⽤remove()⽅法
第⼆种⽅式更⽅便,但前提必须在创建任务实例时,实例被保存在变量中。
对于通过scheduled_job()创建的任务,只能选择第⼀种⽅式。
当任务调度结束时(⽐如,某个任务的触发器不再产⽣下次运⾏的时间),任务就会⾃动移除。
job = scheduler.add_job(myfunc, 'interval', minutes=2)
job.remove()
同样,通过任务的具体ID:
scheduler.add_job(myfunc, 'interval', minutes=2, id='my_job_id')
scheduler.remove_job('my_job_id')
7. 暂停和恢复任务
通过任务实例或调度器,就能暂停和恢复任务。
如果⼀个任务被暂停了,那么该任务的下⼀次运⾏时间就会被移除。
在恢复任务前,运⾏次数计数也不会被统计。
暂停任务,有以下两个⽅法:
apscheduler.job.Job.pause()
apscheduler.schedulers.base.BaseScheduler.pause_job()
恢复任务
apscheduler.job.Job.resume()
apscheduler.schedulers.base.BaseScheduler.resume_job()
8. 获取任务列表
通过get_jobs()就可以获得⼀个可修改的任务列表。
get_jobs()第⼆个参数可以指定任务储存器名称,那么就会获得对应任务储存器的任务列表。
print_jobs()可以快速打印格式化的任务列表,包含触发器,下次运⾏时间等信息。
修改任务
通过apscheduler.job.Job.modify()或modify_job(),你可以修改任务当中除了id的任何属性。
⽐如:
job.modify(max_instances=6, name='Alternate name')
如果想要重新调度任务(就是改变触发器),你能通过apscheduler.job.Job.reschedule()或reschedule_job()来实现。
这些⽅法会重新创建触发器,并重新计算下次运⾏时间。
⽐如:
scheduler.reschedule_job('my_job_id', trigger='cron', minute='*/5')
9. 关闭调度器
关闭⽅法如下:
scheduler.shutdown()
默认情况下,调度器会先把正在执⾏的任务处理完,再关闭任务储存器和执⾏器。
但是,如果你就直接关闭,你可以添加参数:
scheduler.shutdown(wait=False)
上述⽅法不管有没有任务在执⾏,会强制关闭调度器。
10. 暂停、恢复任务进程
调度器可以暂停正在执⾏的任务:
scheduler.pause()
恢复任务:
scheduler.resume()
同时,也可以在调度器启动时,默认所有任务设为暂停状态。
scheduler.start(paused=True)。