Running a Job Every Second (Why Cron Can't)
There is no cron expression for every second. Cron's smallest field is the minute, so once per minute is its ceiling. For per-second work use a long-running process, a systemd timer, or a while-sleep loop — not cron.
Cron stops at one minute
The five cron fields are minute hour day-of-month month day-of-week. The fastest expression is * * * * *, once a minute. Seconds simply do not exist in the syntax.
Do it with a daemon or loop
If you truly need per-second cadence, run a persistent process instead of scheduling one. A minimal shell version:
while true; do /path/job.sh; sleep 1; done
Wrap that in a systemd service so it restarts on failure and logs to the journal.
systemd timer alternative
A timer with OnUnitActiveSec=1s is the idiomatic way to get sub-minute scheduling on modern Linux, with proper logging and accuracy control.
Reality check
Per-second polling is expensive and usually avoidable — prefer events, inotify, or a message queue if the goal is to react to changes quickly.
FAQ
Is there a cron expression for every second?
No. Cron's minimum interval is one minute (* * * * *). Per-second scheduling is outside cron entirely — use a daemon, a while-sleep loop, or a systemd timer with OnUnitActiveSec=1s.
How do I run a script every second on Linux?
Run a persistent process: while true; do job.sh; sleep 1; done, ideally as a systemd service, or use a systemd timer at OnUnitActiveSec=1s.
Why doesn't cron support seconds?
The classic cron format was designed around minute-level granularity and has only five time fields, the smallest being the minute. There is no seconds field to set.