x0fqmw
Last Updated: February 25, 2016
·
11.98K
· djuki
941be51b48972c2cc9e7335f6dad76fa

Run scripts on Linux/Ubuntu every few seconds, faster than Cron can do it.

With Cron you can run php scripts every minute but not in shorter period of time. So what can you do when you need to run your script every 15 seconds or even 1 second ?

Create shell sctipt like this one fasterthancron.sh

#!/bin/bash
#This script run every 15 seconds
while (sleep 15 && php /path_to_script/faster_than_cron.php) &
do
  wait $!
done

Make this file executable. This script is improved thanks to becreative-germany - see comments.

$sudo chmod +x /path_to/faster_than_cron.sh

Now this script need to be run by system when it boots, so lets change some linux files now. File /etc/rc.local is starting with system, so we can add additionsl scripts it can run. Lets edit this file now.

$sudo nano /etc/rc.local

Add this line into this file before exit 0 line.

sh /path_to/faster_than_cron.sh

Now reboot your system. This can be used to run any kind of scripts or commands on your system.

Say Thanks
Respond

4 Responses
Add your response

5344
10154941 475885639207813 910458244034183173 n

Use more secure method (sleep 15 && command ...) & to ensure that the interval is finished and use & for executing the command asynchronously in a subshell.

over 1 year ago ·
5345
10154941 475885639207813 910458244034183173 n

I have not much knowledge about linux shell scripting but with some minutes i found out that there are many things you must know before you use it as cron alternative:

  1. Your Script execute in the main shell process so the shell is completely blocked I think cause the semicolon behind the while statement (In my case restart was necessary)
  2. To ensure that the job execute in a subshell you must use the & for executing the command asynchronously but you must also wait for this subprocess with ẁait $!

This works nice:

while [ 1 ]
do
(sleep 5 && php /home/Username/Desktop/test.php) &
wait $!
done
over 1 year ago ·
5348
10154941 475885639207813 910458244034183173 n

Sorry @Ivan Đurđevac but this method is even more elegant ^^

while (sleep 5 && php /home/user/desktop/test.php) &
do
wait $!
done
over 1 year ago ·
5349
941be51b48972c2cc9e7335f6dad76fa

We have a winner :) Its mush better, and trick with & running in separate thread is very important. Thanks.

over 1 year ago ·
Filed Under