FreeBSD Cron Job to run (ifconfig em0 down; ifconfig em0 up)

Giorgos Keramidas keramida at ceid.upatras.gr
Wed Aug 29 09:18:30 PDT 2007


On 2007-08-30 01:03, Hinkie <Hinkie at paradise.net.nz> wrote:
> Hi
>
> I want to run a cron job in /etc/crontab that runs (ifconfig em0 down;
> ifconfig em0 up) if my cables static ip gateway can't be pinged but I
> can't figure it out.  I can't get the syntax that runs in the command
> window, to then put intot the crontab....
>
> Can anyone help me?
>
> I've tried all sorts such as:
>
> if (ping -c1 a.b.c.1 != 1) then ifconfig em0 down; ifconfig em0 up endif
> if ping -c1 a.b.c.1 != 1 then ping -c1 203.97.234.1 endif
> if ping -c1 a.b.c.1 (ifconfig em0 down; ifconfig em0 up)
> if ( ping -c1 a.b.c.1 != 1) ( ping -c1 203.97.234.182 )
> if $command("=ping -c1 a.b.c.1 =0") echo sucess
> if ping -c 1 -w 1 a.b.c.1 >/dev/null  echo sucess
> if [[ (ping -q -c 3 a.b.c.1) == @(*100% packet loss*) ]]; echo sucess
> if ! ping -c a.b.c.1 > /dev/null ; then echo sucess ; echo fail; fi

I see you are using csh(1) shell syntax.

The crontab entries are passed as commands to /bin/sh, so this
sort of syntax won't really work.

In general, I find the idea of long, complex crontab entries
_very_ error-prone, and I prefer writing scripts which are
_callable_ from cron.

For example, I have several local clones of repositories which
can be synchronized using Mercurial, but properly synchronizing
them would require running:

        #!/bin/sh

        repo="mercurial/crew"
        repodir="${HOME}/hg/mercurial/crew"

        cd "${repodir}"
        if test $? -ne 0 ; then
                echo "${repodir}: directory not accessible." >&2
                exit 1
        fi

        hg pull

Instead of cluttering my crontab with long-winded, complex stuff
like this, I wrote a short shell script -- like the one above --
and saved it in my `~/cron.d' directory.  Now my crontab
contains:

    */2 * * * * ${HOME}/cron.d/hg-pull-crew.sh

Try something similar too.  It's easier to maintain potentially
complex actions, if you `abstract away' all the complexity behind
a script.

Then you can also use whatever you prefer to write the scripts,
like csh(1), Perl, or Python.  Just make the script file
executable and make sure it contains the proper '#!' line.

- Giorgos



More information about the freebsd-questions mailing list