Can Cron Run Every Second?
No — cron's finest resolution is one minute, so there is no expression for every second. To run something every second, use a shell loop with sleep, a systemd timer with a sub-minute interval, or a long-running process instead.
Why cron can't do seconds
A crontab line has no seconds field — the smallest unit is the minute (* * * * * = every minute). This is by design; cron was never meant for sub-minute scheduling.
Workaround 1: sleep loop inside a minute
Run a script every minute that loops with sleep:
* * * * * /usr/bin/bash -c 'for i in $(seq 1 60); do /path/task.sh; sleep 1; done'
This fires roughly once a second for the minute, then the next cron tick restarts it. Keep task.sh fast so runs don't overlap.
Workaround 2: systemd timer
A systemd timer supports sub-minute intervals: set OnUnitActiveSec=1s in a .timer unit. This is the cleaner, supervised option for real per-second work.
Workaround 3: a daemon
For true every-second work, a small long-running service (a loop, or a job queue worker) is more reliable than starting a process 60 times a minute.
FAQ
Is there a cron expression for every second?
No. Cron's minimum interval is one minute — there is no seconds field. Use a sleep loop, a systemd timer (OnUnitActiveSec=1s), or a daemon instead.
How do I run a command every second with cron?
Run a per-minute cron job that loops: for i in $(seq 1 60); do task.sh; sleep 1; done. It approximates every second between minute ticks.
What's better than cron for sub-minute schedules?
A systemd timer with OnUnitActiveSec set to seconds, or a long-running worker process. Both handle sub-minute intervals cron cannot.