Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 Jul 2007 21:57:52 -0700
From:      Garrett Cooper <youshi10@u.washington.edu>
To:        Fredrik Tolf <fredrik@dolda2000.com>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: cron job every 5 hours
Message-ID:  <469D9DD0.6060609@u.washington.edu>
In-Reply-To: <469D9CC2.4040902@u.washington.edu>
References:  <000f01c7c56d$da44d640$0200a8c0@satellite>	<200707160427.l6G4Rb5q090225@banyan.cs.ait.ac.th>	<469AFA30.4050504@u.washington.edu>	<200707180233.l6I2XJrw097658@banyan.cs.ait.ac.th>	<m3sl7miegg.fsf@pc7.dolda2000.com> <469D9CC2.4040902@u.washington.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
Garrett Cooper wrote:
> Fredrik Tolf wrote:
>> Olivier Nicole <on@cs.ait.ac.th> writes:
>>
>>  
>>>>     Something like:
>>>>
>>>>     minute */5 * * * root path/to/scriptname
>>>>
>>>>     will do the trick.
>>>>
>>>>     Substitute the * in */5 for your desired start time (* being 0).
>>>>
>>>> -Garrett
>>>>
>>>> PS crond won't do 5 hours and every x number of minutes per job (5 
>>>> hours + x mins from end to start), just a flat amount of time (5 
>>>> hours apart from start to start). If you need that type of 
>>>> 'precision', at will solve that like Olivier said if you place it 
>>>> at the end of the command.
>>>>       
>>> I am afraid not.
>>>
>>> */5 means on every hours that is a multiple of 5, not every five
>>>  hours. So it will run every day at hour 0, 5, 10, 15 and 20. Between
>>>  hour 20 one day and hour 0 the next day there is only 4 hours, not
>>>  the "every 5 hours" requested.
>>>     
> That's what I meant >_>..
>>> Just to confirm that I launched a cron job yesterday:
>>>
>>> 23 */5 * * * /home/java/on/crontest
>>>
>>> It ran at 15:23, 20:23 and today at 0:23 and 5:23 and so on:
>>>
>>> Date: Wed, 18 Jul 2007 05:23:00 +0700 (ICT)
>>> From: Olivier Nicole <on@cs.ait.ac.th>
>>> To: on@banyan.cs.ait.ac.th
>>> Subject: test crontab 5 hours
>>> X-Virus-Scanned: on CSIM by amavisd-milter (http://www.amavis.org/)
>>>
>>> This is a test for crontab
>>> [...]
>>> Only way to run a job every 5 hours is with at(1).
>>>     
>>
>> I wouldn't go as far as saying the *only* way. You could make the cron
>> job run every hour and then have an internal check in it (or using a
>> wrapper script that checks it). Kind of like this, maybe?
>>
>> #!/bin/sh
>> unset nogo
>> if [ -r /tmp/lastrun ]; then
>>     now=`date +%H`
>>     if [ $((($now + 24 - `cat /tmp/lastrun`) % 24)) -lt 5 ]; then
>>         nogo=y
>>     fi
>> fi
>>
>> if [ "$nogo" = y ]; then exit 0; fi
>>
>> date +%H >/tmp/lastrun
>>
>> # Do real work here
>>   
>
>    If you're going to do it that way, just try something like this:
>
> #!/bin/sh
>
> while [ 1 ]; do
>    exec command;
>    sleep 1900 # 5 hours => 5*3600;
> done
>
>    and set it up as an rc script :).
>
>    Shell scripts with sleep won't give you exactly the 5 hours you 
> desire, but should come close (within 1-5 seconds of actual time 
> depending on your host PC's precision, and whether or not your RTC 
> battery is dead ;)..).
>
> -Garrett
That should read 19000. Doh!
-Garrett




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?469D9DD0.6060609>