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]"

Reply via email to