如何配置Cron Job实现每日11:30至19:00每30分钟执行Python脚本?
修复Cron表达式及替代调度方案
问题分析
你当前的Cron表达式*/30 11-19 * * *的问题在于:
*/30表示每小时的0分和30分都触发,因此11:00会被执行,不符合起始时间要求- 小时范围
11-19包含19点整和19点30分,所以会触发19:30的任务,超出结束时间
修复后的Cron方案
要精准覆盖11:30、12:00……19:00的执行点,需要拆分配置为3个独立的Cron任务:
- 11点仅执行30分:
30 11 * * * /usr/bin/python3 /mnt/h/WorkSpace/Projects/Backlog_Buddy_Bot/CTest.py - 12点到18点每30分钟执行一次:
*/30 12-18 * * * /usr/bin/python3 /mnt/h/WorkSpace/Projects/Backlog_Buddy_Bot/CTest.py - 19点仅执行0分:
0 19 * * * /usr/bin/python3 /mnt/h/WorkSpace/Projects/Backlog_Buddy_Bot/CTest.py
这三个任务组合后,完全匹配你需要的所有时间点,且不会触发11:00和19:30的任务。
替代调度工具方案
如果觉得Cron拆分配置太繁琐,可以用Python的调度库实现更灵活的控制:
APScheduler(推荐)
APScheduler支持多种调度方式,代码示例如下:
from apscheduler.schedulers.blocking import BlockingScheduler import subprocess def run_script(): subprocess.run(["/usr/bin/python3", "/mnt/h/WorkSpace/Projects/Backlog_Buddy_Bot/CTest.py"]) if __name__ == "__main__": scheduler = BlockingScheduler() # 11-18点,每小时的0分和30分执行 scheduler.add_job(run_script, 'cron', hour='11-18', minute='0,30') # 单独添加19:00的任务 scheduler.add_job(run_script, 'cron', hour='19', minute='0') scheduler.start()
将这段代码保存为schedule_script.py,后台运行即可(比如用nohup python3 schedule_script.py &)。
schedule库
更轻量的调度库,代码示例:
import schedule import time import subprocess def run_script(): subprocess.run(["/usr/bin/python3", "/mnt/h/WorkSpace/Projects/Backlog_Buddy_Bot/CTest.py"]) # 设置11:30的任务 schedule.every().day.at("11:30").do(run_script) # 设置12:00到18:30每30分钟的任务 for hour in range(12, 19): schedule.every().day.at(f"{hour}:00").do(run_script) if hour < 18: schedule.every().day.at(f"{hour}:30").do(run_script) # 设置19:00的任务 schedule.every().day.at("19:00").do(run_script) while True: schedule.run_pending() time.sleep(60)
内容的提问来源于stack exchange,提问作者Gautham Santhosh
相关产品推荐
相关产品推荐

