Skip to content

Conversation

@drakkan
Copy link

@drakkan drakkan commented Feb 20, 2023

Suppose you have a job scheduled every minute.

The current time is 15:00:00 and for reasons outside our control it is set to 17:00:00, the job runs as expected and "Next" will be set to 17:01:00.
If the system clock returns to the correct time and so now is, for example, 15:01:00, when we calculate the duration of the timer here

cron/cron.go

Line 259 in bc59245

timer = time.NewTimer(c.entries[0].Next.Sub(now))

we will have something like 2 hours and then no job runs for 2 hours.

This patch fixes the issue. Thank you

CybotTM added a commit to netresearch/go-cron that referenced this pull request Nov 25, 2025
- Add detection for system time moving backwards (NTP correction,
  VM snapshot restore) and reschedule affected entries (robfig#480)
- Pre-allocate slice in removeEntry to avoid reallocations (robfig#539)
- Add tests for time backwards detection and WithSeconds option
@CybotTM
Copy link

CybotTM commented Dec 4, 2025

Solution available in maintained fork

This feature has been implemented in netresearch/go-cron, a maintained fork of this library.

Implementation: The scheduler now gracefully handles system time moving backwards (e.g., NTP corrections, manual clock adjustments). When time goes backwards, entries are re-evaluated against the new time to ensure correct scheduling.

How to migrate:

// Change import from:
import "github.com/robfig/cron/v3"

// To:
import cron "github.com/netresearch/go-cron"

The API is 100% backward compatible. See the migration guide for details.

Related: netresearch#52

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants