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>