...making Linux just a little more fun!
Chiew May Cheong [chiew_may at hotmail.com]
I have got a bash script called del_level0.sh that runs every Friday that looks like this:
#!/bin/bash cd /u1/database/prod/level0 rm *There's a cron entry for this script that runs every Friday:
linux:/usr/local/bin # crontab -l # DO NOT EDIT THIS FILE - edit the master and reinstall. # (/tmp/crontab.XXXXvi5yHq installed on Tue Jun 26 14:13:04 2007) # (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $) 0 15 * * 5 /usr/local/bin/del_level0.sh > /dev/null 2>&1Can you help me so that the script runs at 3pm every 2nd and 4th Friday of the month?
Thanks.
Regards,
Chiew May
Ramanathan Muthaiah [rus.cahimb at gmail.com]
> Can you help me so that the script runs at 3pm every 2nd and 4th Friday of > the month?
Running, "info crontab" or "man crontab", should provide the details.
/Ram
Thomas Adam [thomas.adam22 at gmail.com]
On 26/06/07, Chiew May Cheong <chiew_may@hotmail.com> wrote:
> I have got a bash script called del_level0.sh that runs every Friday that > looks like this:
> #!/bin/bash > cd /u1/database/prod/level0 > rm *
Hmm. Presumably there's no directories under there. What if the number of files increases? The globbing will soon fail after that. Better off:
find . -type f -print0 | xargs -0 rmThat would recurse though. If you wanted to restrict to that to just the one directory (which is what the glob would do):
find . -type f -maxdepth 1 -print0 | xargs -0 rm
> There's a cron entry for this script that runs every Friday: > > 0 15 * * 5 /usr/local/bin/del_level0.sh > /dev/null 2>&1 > > Can you help me so that the script runs at 3pm every 2nd and 4th Friday of > the month?
Vixie Cron won't let you do this, however, you could do something like this:
3 15 7-14, 21-30 * 5 test 'date +\%a' != Fri || /usr/local/bin/del_level0.sh > /dev/null 2>&1The idea here is that we try and restrict the range of dates the 2nd and 4th Friday in any given month can be in by checking for Fri in that range.
-- Thomas Adam
Ben Okopnik [ben at linuxgazette.net]
On Tue, Jun 26, 2007 at 06:43:09AM +0100, Thomas Adam wrote:
> On 26/06/07, Chiew May Cheong <chiew_may@hotmail.com> wrote: > > > There's a cron entry for this script that runs every Friday: > > > > 0 15 * * 5 /usr/local/bin/del_level0.sh > /dev/null 2>&1 > > > > Can you help me so that the script runs at 3pm every 2nd and 4th Friday of > > the month? > > Vixie Cron won't let you do this, however, you could do something like this: > > `` > 3 15 7-14, 21-30 * 5 test 'date +\%a' != Fri || > /usr/local/bin/del_level0.sh > /dev/null 2>&1 > '' > > The idea here is that we try and restrict the range of dates the 2nd > and 4th Friday in any given month can be in by checking for Fri in > that range.
You could also split the job between the script and the cronjob instead of trying to make it all happen in one place.
# In the crontab 3 15 7-14, 21-30 * 5 /usr/local/bin/del_level0.sh > /dev/null 2>&1 # In the script [ `/bin/date +%a` == 'Fri' ] || exit
-- * Ben Okopnik * Editor-in-Chief, Linux Gazette * https://LinuxGazette.NET *
Thomas Adam [thomas.adam22 at gmail.com]
On 26/06/07, Ben Okopnik <ben@linuxgazette.net> wrote:
> > You could also split the job between the script and the cronjob instead > of trying to make it all happen in one place.
Yes, you could, but so what? It's only one line that doesn't do anything complex, the only real caveat is to remember to escape the percent signs to the date command.
-- Thomas Adam
Ben Okopnik [ben at linuxgazette.net]
On Tue, Jun 26, 2007 at 11:44:53PM +0100, Thomas Adam wrote:
> On 26/06/07, Ben Okopnik <ben@linuxgazette.net> wrote: > > > > You could also split the job between the script and the cronjob instead > > of trying to make it all happen in one place. > > Yes, you could, but so what? It's only one line that doesn't do > anything complex, the only real caveat is to remember to escape the > percent signs to the date command.
Which, in my opinion, makes it more complex than it needs to be. Intermixing two different syntaxes when it's unnecesary does not seem like a reasonable approach.
In the case that I demonstrated, 'cron' does its job and interprets its own syntax, and Bash does its part; that makes any problems easier to troubleshoot. Incidentally, the redirect to /dev/null is also most likely unnecessary - 'cron' doesn't run in a terminal.
-- * Ben Okopnik * Editor-in-Chief, Linux Gazette * https://LinuxGazette.NET *