Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 16 Feb 2006 19:19:24 -0600
From:      Dan Nelson <dnelson@allantgroup.com>
To:        Tim Daneliuk <tundra@tundraware.com>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: /bin/sh Madness
Message-ID:  <20060217011923.GA87403@dan.emsphone.com>
In-Reply-To: <43F50074.8060205@tundraware.com>
References:  <43F50074.8060205@tundraware.com>

next in thread | previous in thread | raw e-mail | index | archive | help
In the last episode (Feb 16), Tim Daneliuk said:
> Here is a shell function that behaves quite strangely:
> 
> #!/bin/sh
> #####
> # Execute A Command, Noting Start/Stop Time, & Logging Output
> # Args:
> #       $1 Command Name
> #       $2 Log Directory
> #       $3 Command String To Execute
> #####
> 
> runupd()
> {
>       log=$2/$1.log
>       timestamp $log
>       touch $2/.$1-begin && eval $3 2>&1 >> $log && touch $2/.$1-end &
> }
> # End of 'runupd()'
> 
> So, you might do something like:
> 
>    runupd freespace /var/log/ "df -k"
> 
> Now, for the weirdness.  This function works fine in my script
> so long as one of two conditions is met:
> 
>    1) I run it interactively from the command line (bash)
>                       OR
>    2) I run it from 'cron' AND $3 is *not* another script
> 
> If I try to run it from 'cron' and point $3 to a script, everything gets
> run as planned, however, the ending timestamp (touch $2/.$1-end) never
> runs. That is, the initial time stamp (.$1-begin) and the command itself
> are executed, and output is properly written to the logfile,
> but the final timestamp never happens.

Could your $3 command be returning a nonzero exit code?  You probably
want something more like

touch $2/.$1-begin && { eval $3 2>&1 >> $log ; touch $2/.$1-end } &

so your end timestamp always gets created whether or not $3 succeeds.
Also note that in your original script, you only backgrounded "touch
$2/.$1-end", which is probably not what you wanted.

-- 
	Dan Nelson
	dnelson@allantgroup.com



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