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.
Written by Ivan Đurđevac
Related protips
4 Responses
Use more secure method (sleep 15 && command ...) &
to ensure that the interval is finished and use &
for executing the command asynchronously in a subshell.
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:
- 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)
- 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
Sorry @Ivan Đurđevac but this method is even more elegant ^^
while (sleep 5 && php /home/user/desktop/test.php) &
do
wait $!
done
We have a winner :) Its mush better, and trick with & running in separate thread is very important. Thanks.