Dan Nelson wrote:
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 } &
I am looking into this.
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.
Hmmmm - I have invoked the script that uses this function a variety of ways and the command being evaled *is* being backgrounded in every case with the syntax shown above ... -- ---------------------------------------------------------------------------- Tim Daneliuk [EMAIL PROTECTED] PGP Key: http://www.tundraware.com/PGP/ _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"
