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