Date: Wed, 29 Aug 2007 19:17:33 +0300 From: Giorgos Keramidas <keramida@ceid.upatras.gr> To: Hinkie <Hinkie@paradise.net.nz> Cc: freebsd-questions@freebsd.org Subject: Re: FreeBSD Cron Job to run (ifconfig em0 down; ifconfig em0 up) Message-ID: <20070829161733.GA5302@kobe.laptop> In-Reply-To: <01a901c7ea3d$0ad62720$1e00a8c0@cheqsoft.local> References: <01a901c7ea3d$0ad62720$1e00a8c0@cheqsoft.local>
index | next in thread | previous in thread | raw e-mail
On 2007-08-30 01:03, Hinkie <Hinkie@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
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070829161733.GA5302>
