I have a cron job which runs every five minutes all day long.
I want to stop this cron job running on Sundays between 4pm and 5pm - it should start again after this time.
How can I script this?
Stick this at the top of your cron job script (modified as you need)...
if [[ $(date +%u) -eq 7 && $(date +%H) -eq 16 ]]; then
echo "I don't run at this time"
exit 1
fi
echo "Something to do at other times here..."
The first instance of "date" returns the day of week (Sunday = 7), the second returns the hour (16 = 4.00pm - 4.59pm). If the script finds that it's currently day 7 and hour 16, it will exit.
What about:
*/5 * * * * job.sh > /dev/null
00 16 * * 0 touch /tmp/stopJob.lck
00 17 * * 0 rm -f /tmp/stopJob.lck
In job.sh
just quit if the file exists:
if [ -f /tmp/stopJob.lck ]
then
exit
fi
You may not need much if your cron job runs a script and you can make it check for the absence of a process set up to run between 4PM and 5PM on Sundays
For example, I use a cron job every 15 minutes which invokes rsync
but only if rsync
is not already running.
It uses the pidof
command to check if a particular process id is running:
PID=$(pidof rsync)
if [ -z $PID ]
then
rsync -avz ....
fi
You will need to work out the details for your particular situation. I present it now as an idea to think about.