Skip to main content
How to run cron jobs every 5, 10, or 30 seconds
  1. Linux/

How to run cron jobs every 5, 10, or 30 seconds

·351 words·
linux
リヴンラボ
Author
リヴンラボ
RivenLab
Table of Contents

By default, cron checks crontabs for cronjobs every minute. If you want to run a job every n seconds you need to use a simple workaround.

Method 1 : Using a start script
#

The easiest way to run a job every n seconds is to run a job every minute and, and sleep in a loop in n second intervals.

Every 5 seconds
#

i=0

while [ $i -lt 12 ]; do # 12 five-second intervals in 1 minute
  command/to/run & #run your command
  sleep 5
  i=$(( i + 1 ))
done

crontab -e

* * * * * start.sh

Every 15 seconds
#

i=0

while [ $i -lt 4 ]; do # 4 ten-second intervals in 1 minute
  command/to/run & #run your command
  sleep 15
  i=$(( i + 1 ))
done

crontab -e

* * * * * start.sh

Every 30 seconds
#

i=0

while [ $i -lt 2 ]; do # 2 ten-second intervals in 1 minute
  command/to/run & #run your command
  sleep 30
  i=$(( i + 1 ))
done

crontab -e

* * * * * start.sh

Method 2 : Specify multiple jobs with offsets
#

The trick is to simply play around with the sleep command number of seconds:

Every 10 seconds
#

* * * * * date>> /tmp/date.log
* * * * * sleep 10; date>> /tmp/date.log
* * * * * sleep 20; date>> /tmp/date.log
* * * * * sleep 30; date>> /tmp/date.log
* * * * * sleep 40; date>> /tmp/date.log
* * * * * sleep 50; date>> /tmp/date.log

Once again if we watch the /tmp/date.log file, it should be updated every 10 seconds based on the above crontab entries:

tail -f  /tmp/date.log

Every 15 seconds
#

* * * * * date>> /tmp/date.log
* * * * * sleep 15; date>> /tmp/date.log
* * * * * sleep 30; date>> /tmp/date.log
* * * * * sleep 45; date>> /tmp/date.log

Every 20 seconds
#

* * * * * date>> /tmp/date.log
* * * * * sleep 20; date>> /tmp/date.log
* * * * * sleep 40; date>> /tmp/date.log