agronholm / agronholm/apscheduler
after DST scheduler is stuck, jobs are not getting fired
- Dominant language
- Python
- Stars
- 7.6k
- Forks
- 783
- Avg merge
- 4d 8h
- Merged PRs (30d)
- 5
Description
### Things to check first
- [x] I have checked that my issue does not already have a solution in the [FAQ](https://apscheduler.readthedocs.io/en/master/faq.html)
- [x] I have searched the existing issues and didn't find my bug already reported there
- [x] I have checked that my bug is still present in the latest release
### Version
3.11.0
### What happened?
With the apscheduler's cron trigger, jobs are not triggered after the DST transition period.
### How can we reproduce the bug?
Set System time to 30 seconds prior to DST transition period - 2025-03-09 01:59:30 AM
```
import asyncio
from datetime import datetime
from apscheduler.schedulers.asyncio import AsyncIOScheduler
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger('apscheduler')
logger.setLevel(logging.DEBUG)
def tick():
print(f"Tick! The time is: {datetime.now()}")
async def main():
scheduler = AsyncIOScheduler()
scheduler.add_job(tick, "cron", second="*/7")
scheduler.start()
while True:
for job in scheduler.get_jobs():
print(f"==== timestamp:{datetime.now()}, scheduler jobs ==> Job "
f"{job.id} scheduled next run at: {job.next_run_time}====")
await asyncio.sleep(5)
if __name__ == "__main__":
try:
asyncio.run(main())
except (KeyboardInterrupt, SystemExit):
pass
```
execution output
```
DEBUG:asyncio:Using selector: KqueueSelector
DEBUG:tzlocal:/etc/localtime found
DEBUG:tzlocal:1 found:
{'/etc/localtime is a symlink to': 'America/Chicago'}
INFO:apscheduler.scheduler:Adding job tentatively -- it will be properly scheduled when the scheduler starts
INFO:apscheduler.scheduler:Added job "tick" to job store "default"
INFO:apscheduler.scheduler:Scheduler started
DEBUG:apscheduler.scheduler:Looking for jobs to run
DEBUG:apscheduler.scheduler:Next wakeup is due at 2025-03-09 01:59:35-06:00 (in 3.099565 seconds)
==== timestamp:2025-03-09 01:59:31.900390, scheduler jobs ==> Job cc015b86296049cb8bdf58909341dcf1 scheduled next run at: 2025-03-09 01:59:35-06:00====
DEBUG:apscheduler.scheduler:Looking for jobs to run
INFO:apscheduler.executors.default:Running job "tick (trigger: cron[second='*/7'], next run at: 2025-03-09 01:59:35 CST)" (scheduled at 2025-03-09 01:59:35-06:00)
INFO:apscheduler.executors.default:Job "tick (trigger: cron[second='*/7'], next run at: 2025-03-09 01:59:35 CST)" executed successfully
DEBUG:apscheduler.scheduler:Next wakeup is due at 2025-03-09 01:59:42-06:00 (in 6.994773 seconds)
Tick! The time is: 2025-03-09 01:59:35.004849
==== timestamp:2025-03-09 01:59:36.900796, scheduler jobs ==> Job cc015b86296049cb8bdf58909341dcf1 scheduled next run at: 2025-03-09 01:59:42-06:00====
==== timestamp:2025-03-09 01:59:41.901411, scheduler jobs ==> Job cc015b86296049cb8bdf58909341dcf1 scheduled next run at: 2025-03-09 01:59:42-06:00====
Tick! The time is: 2025-03-09 01:59:42.001396
DEBUG:apscheduler.scheduler:Looking for jobs to run
DEBUG:apscheduler.scheduler:Next wakeup is due at 2025-03-09 01:59:49-06:00 (in 6.999166 seconds)
INFO:apscheduler.executors.default:Running job "tick (trigger: cron[second='*/7'], next run at: 2025-03-09 01:59:49 CST)" (scheduled at 2025-03-09 01:59:42-06:00)
INFO:apscheduler.executors.default:Job "tick (trigger: cron[second='*/7'], next run at: 2025-03-09 01:59:49 CST)" executed successfully
==== timestamp:2025-03-09 01:59:46.902171, scheduler jobs ==> Job cc015b86296049cb8bdf58909341dcf1 scheduled next run at: 2025-03-09 01:59:49-06:00====
DEBUG:apscheduler.scheduler:Looking for jobs to run
DEBUG:apscheduler.scheduler:Next wakeup is due at 2025-03-09 01:59:56-06:00 (in 6.998527 seconds)
INFO:apscheduler.executors.default:Running job "tick (trigger: cron[second='*/7'], next run at: 2025-03-09 01:59:56 CST)" (scheduled at 2025-03-09 01:59:49-06:00)
INFO:apscheduler.executors.default:Job "tick (trigger: cron[second='*/7'], next run at: 2025-03-09 01:59:56 CST)" executed successfully
Tick! The time is: 2025-03-09 01:59:49.001911
==== timestamp:2025-03-09 01:59:51.902916, scheduler jobs ==> Job cc015b86296049cb8bdf58909341dcf1 scheduled next run at: 2025-03-09 01:59:56-06:00====
DEBUG:apscheduler.scheduler:Looking for jobs to run
DEBUG:apscheduler.scheduler:Next wakeup is due at 2025-03-09 03:00:00-05:00 (in 3603.999241 seconds)
INFO:apscheduler.executors.default:Running job "tick (trigger: cron[second='*/7'], next run at: 2025-03-09 03:00:00 CDT)" (scheduled at 2025-03-09 01:59:56-06:00)
INFO:apscheduler.executors.default:Job "tick (trigger: cron[second='*/7'], next run at: 2025-03-09 03:00:00 CDT)" executed successfully
Tick! The time is: 2025-03-09 01:59:56.001176
==== timestamp:2025-03-09 01:59:56.903779, scheduler jobs ==> Job cc015b86296049cb8bdf58909341dcf1 scheduled next run at: 2025-03-09 03:00:00-05:00====
==== timestamp:2025-03-09 03:00:01.904669, scheduler jobs ==> Job cc015b86296049cb8bdf58909341dcf1 scheduled next run at: 2025-03-09 03:00:00-05:00====
==== timestamp:2025-03-09 03:00:06.905596, scheduler jobs ==> Job cc015b86296049cb8bdf58909341dcf1 scheduled next run at: 2025-03-09 03:00:00-05:00====
==== timestamp:2025-03-09 03:00:11.906636, scheduler jobs ==> Job cc015b86296049cb8bdf58909341dcf1 scheduled next run at: 2025-03-09 03:00:00-05:00====
```
Contributor guide
Assessment
This issue has not been assessed yet.