From owner-freebsd-questions@FreeBSD.ORG Fri Feb 17 23:40:03 2006 Return-Path: X-Original-To: freebsd-questions@freebsd.org Delivered-To: freebsd-questions@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 027D916A420 for ; Fri, 17 Feb 2006 23:40:03 +0000 (GMT) (envelope-from tundra@tundraware.com) Received: from eskimo.tundraware.com (eskimo.tundraware.com [64.2.229.164]) by mx1.FreeBSD.org (Postfix) with ESMTP id C2E6B43D46 for ; Fri, 17 Feb 2006 23:39:58 +0000 (GMT) (envelope-from tundra@tundraware.com) Received: from [192.168.0.2] (viper.tundraware.com [192.168.0.2]) (authenticated bits=0) by eskimo.tundraware.com (8.13.4/8.13.4) with ESMTP id k1HNdv3j065528 (version=TLSv1/SSLv3 cipher=DHE-DSS-AES256-SHA bits=256 verify=NO) for ; Fri, 17 Feb 2006 17:39:58 -0600 (CST) (envelope-from tundra@tundraware.com) Message-ID: <43F65EC4.8000703@tundraware.com> Date: Fri, 17 Feb 2006 17:39:48 -0600 From: Tim Daneliuk Organization: TundraWare Inc. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 X-Accept-Language: en-us, en MIME-Version: 1.0 To: freebsd-questions@freebsd.org References: <43F50074.8060205@tundraware.com> <20060217011923.GA87403@dan.emsphone.com> In-Reply-To: <20060217011923.GA87403@dan.emsphone.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-TundraWare-MailScanner-Information: Please contact the ISP for more information X-TundraWare-MailScanner: Found to be clean X-MailScanner-From: tundra@tundraware.com Subject: Re: /bin/sh Madness X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: tundra@tundraware.com List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Feb 2006 23:40:03 -0000 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 } & > > 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. > This seems not to work - I don't think 'sh' likes nested function braces - recall that this command appears inside a shell function. In any case, I think I have nailed the problem. It seems that the external script being called made reference to 'chown' without explicitly naming the program's path. Under 'cron' control, there is no path to /usr/sbin by default so the script was exiting with a non-zero exit status as several here suggested. . Many thanks to all who took time to answer. -- ---------------------------------------------------------------------------- Tim Daneliuk tundra@tundraware.com PGP Key: http://www.tundraware.com/PGP/