crontab question involving cvsup

Joshua Tinnin krinklyfig at spymac.com
Thu Aug 26 01:09:11 PDT 2004


On Thursday 26 August 2004 12:42 am, epilogue <epilogue at allstream.net> 
wrote:
> On Thu, 26 Aug 2004 00:07:26 -0700
>
> Joshua Tinnin <krinklyfig at spymac.com> wrote:
> > OK, I have searched the archives, and I can't find that my question
> > has been answered previously, but please forgive me if that's
> > incorrect.
> >
> > I'm using (or rather trying to use) cron to update my ports tree
> > daily. I've tried several different combinations without success,
> > and lately this is what I have in my crontab file:
> >
> > /usr/local/bin/cvsup -g -L 2
> > /home/krinklyfig/supfiles/ports-supfile && /usr/local/bin/portindex
> > && /usr/local/sbin/portsdb -u
> >
> > It runs as root once a day. What appears to be happening is that
> > the cvsup is happening, but portindex is not, and because of the
> > latter portsdb -u doesn't either. The reason I know cvsup is
> > working is because portindex indicates that the ports tree has been
> > updated if I run it manually later, but running portversion before
> > manually running portindex will not indicate any changes. The cron
> > log doesn't show anything but the commands being executed. So, my
> > question is: is this type of command valid, or should each command
> > be separate? Or is it not working for some other reason?
>
> man cron gives:
>
> crontab [-u user] file
>
> 'file' being the important part, methinks.   ;)

I'm not sure what you mean ... If you're wondering, I'm using the main 
crontab file (/etc/crontab), as right now there's no need for me to use 
multiple ones.

> what you might want to do, is simply write a shell script and feed
> that into your crontab.  in case you're not sure how to make a
> script, it is very simple and google will return many tutorials.

I had considered this, and eventually would like to do so, as I'd like 
to add the output of fastest_cvsup to the server listed in the supfile.

> in a nutshell, you put the commands you want into a file, make that
> file executable (chmod), and away you go.
>
> the first line of a shell script has an obligatory format and invokes
> the shell that will be used.
>
> #!/bin/sh                  << the leading # is required
> /usr/local/bin/cvsup -L 2 /foo/path/to/your/ports-supfile;
> # comments are allowed
> portindex;
> exit

Is verbosity of -L 2 allowed in a script without output? IOW, should 
that first line be:

/usr/local/bin/cvsup -L 2 /path/to/supfile > /dev/null 2>&1;

Or does it matter if the output has nowhere to go?

> note: you might also prefer to end commands with && rather than ;
>
> i'm new to scripting myself so please forgive my feeble explanation.

I'm pretty new to scripting as well. Does ; allow the next line to run, 
even if the previous one didn't, as opposed to && which would only 
allow the next line to run if the previous one was successful? (This 
would be similar to how a one-line command works outside a script.)

> about the commands which you are planning to include, why the
> 'portsdb -u'? is that not doing essentially the same work as
> 'portindex' ?
>
> (http://www.freshports.org/sysutils/portindex/)

No, portindex doesn't update the database. The command portsdb -U 
generates an INDEX, which is what portindex does (although portindex 
does it faster), while portsdb -u generates the INDEX.db from the ports 
INDEX file. However, the database is generated automatically if need be 
when it's looked up, so it's not necessary - man portsdb mentions this 
- but I like to have my ducks in a row, so to speak ;)

> anyhow.  hope this helps.

Yes, it has me thinking I should probably start testing out a script, 
but it will include a bit more than just cvsup'ping, updating the INDEX 
and database. Thanks.

- jt


More information about the freebsd-questions mailing list