## TL;DR

Two overlapping runs of the same job cause duplicate posts, double charges, or corrupted state.
A lock is cheap; debugging a double-run is not.
Applies to cron, scheduled tasks, and recurring agent loops.

## The query

```text
cron job overlap: preventing double runs
```

## Use this when

- A scheduled job can overrun its interval.
- Overlapping runs would duplicate work or corrupt state.
- You need a lock both simple and reliable.

## Not for

- The job always finishes in seconds and the interval is hourly (overlap is practically impossible).
- The job is idempotent and safe to run twice (still add the lock; cheap insurance).
- You are using a scheduler with built-in single-instance guarantees (verify it, then rely on it).

## Steps

1. Add a lock at job start: a lock file with PID, or a distributed lock for multi-host setups.
   Expected output: A lock that a second invocation can detect.
2. Make the second invocation exit quietly with a log line when the lock is held.
   Expected output: No duplicate work, and a log record of the skipped run.
3. Add a stale-lock timeout in case a run dies without releasing the lock.
   Expected output: Recovery from crashed runs without manual cleanup.
4. Alert if overlaps happen often: frequent skips mean the interval is too tight or the job too slow.
   Expected output: A signal telling you to fix the schedule, not just the lock.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_DwHLiNvmmIJEgikDnqa7nw
