Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 16 Feb 2006 16:45:08 -0600
From:      Tim Daneliuk <tundra@tundraware.com>
To:        freebsd-questions@freebsd.org
Subject:   /bin/sh Madness
Message-ID:  <43F50074.8060205@tundraware.com>

next in thread | raw e-mail | index | archive | help
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.

I have been fiddling with this on- and off and cannot seem to explain
the behavior. I',m guessing that something about the combination of
'cron'and the 2>&1 >> $log business is causing the last touch to never
get invoked, but for the life of me, I cannot figure this one out.

Interestingly, this works fine in Linux (SuSE 10.0).  In Linux, both
'sh' and 'bash' are the same binary (bash is running as sh).  So ..
I went back to FreeBSD (4.x in this case, though the problem is also
noted in 6.x) and changed the SHELL variable in the crontabs file to
use 'bash' - same problem.

This is starting to feel like a problem with file handles getting clobbered
in the FreeBSD exec logic.

Other explanations welcome...
-- 
----------------------------------------------------------------------------
Tim Daneliuk     tundra@tundraware.com
PGP Key:         http://www.tundraware.com/PGP/





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