PATH="$PATH:/usr/sbin:/sbin:/usr/ucb"
export PATH
-USE_VERSION_SUFFIXES="@USE_VERSION_SUFFIXES@"
-if test "$USE_VERSION_SUFFIXES" = "yes"; then
- SUF="-@VERSION@"
-else
- SUF=
-fi
-
if [ $# -lt 1 ]
then
echo `_ 'Usage: %s config [host [disk...]...]' "$0"` 1>&2
conf=$1
if [ ! -d $confdir/$conf ]; then
- echo `_ '%s: could not find directory %s' "amdump$SUF" "$confdir/$conf"` 1>&2
+ echo `_ '%s: could not find directory %s' "amdump" "$confdir/$conf"` 1>&2
exit 1
fi
shift
cd $confdir/$conf || exit 1
-logdir=`amgetconf$SUF $conf logdir "$@"`
+logdir=`amgetconf $conf logdir "$@"`
[ $? -ne 0 ] && exit 1
errfile=$logdir/amdump
-tapecycle=`amgetconf$SUF $conf tapecycle "$@"`
+tapecycle=`amgetconf $conf tapecycle "$@"`
[ $? -ne 0 ] && exit 1
-dumpuser=`amgetconf$SUF $conf dumpuser "$@"`
+dumpuser=`amgetconf $conf dumpuser "$@"`
[ $? -ne 0 ] && exit 1
runuser=`{ whoami ; } 2>/dev/null`
fi
if test -f $errfile || test -f $logdir/log; then
- echo `_ '%s: amdump or amflush is already running, or you must run amcleanup' "$0"` 1>&2
- exit 1
+ amcleanup -p $conf
fi
-umask 077
-
-exit_code=0
-# Plan and drive the dumps.
-#exec </dev/null >$errfile 2>&1
-touch $errfile
-exit_code=$?
-[ $exit_code -ne 0 ] && exit_status=$exit_code
-exec </dev/null 2>>$errfile 1>&2
-exit_code=$?
-[ $exit_code -ne 0 ] && exit_status=$exit_code
-
gdate=`date +'%a %b %e %H:%M:%S %Z %YAAAAA%Y%m%dBBBBB%Y%m%d%H%M%SCCCCC%Y-%m-%d %H:%M:%S %Z'`
#date=%a %b %e %H:%M:%S %Z %Y
#date_locale_independent=%Y-%m-%d %H:%M:%S %Z
date_locale_independent=`echo $gdate |sed -e "s/^.*CCCCC//"`
+if test -f $errfile || test -f $logdir/log; then
+ process_name=`grep "^INFO .* .* pid " $logdir/log | head -n 1 | awk '{print $2}'`
+ echo `_ '%s: %s is already running, or you must run amcleanup' "$0" "${process_name}"` 1>&2
+ echo "INFO amdump amdump pid $$" > $logdir/log.$$
+ echo "START driver date $date_starttime" >> $logdir/log.$$
+ echo "ERROR amdump " `_ '%s is already running, or you must run amcleanup' "${process_name}"` >> $logdir/log.$$
+ $sbindir/amreport $conf --from-amdump -l $logdir/log.$$ "$@"
+ rm -f $logdir/log.$$
+ exit 1;
+fi
+
+umask 077
+
+echo "INFO amdump amdump pid $$" > $logdir/log
+exit_code=0
+# Plan and drive the dumps.
+#exec </dev/null >$errfile 2>&1
+touch $errfile
+exit_code=$?
+[ $exit_code -ne 0 ] && exit_status=$exit_code
+exec </dev/null 2>>$errfile 1>&2
+exit_code=$?
+[ $exit_code -ne 0 ] && exit_status=$exit_code
+
printf '%s: start at %s\n' "amdump" "$date"
printf '%s: datestamp %s\n' "amdump" "$date_datestamp"
printf '%s: starttime %s\n' "amdump" "$date_starttime"
printf '%s: starttime-locale-independent %s\n' "amdump" "$date_locale_independent"
-$amlibexecdir/planner$SUF $conf --starttime $date_starttime "$@" | $amlibexecdir/driver$SUF $conf "$@"
+if [ ! -x $amlibexecdir/planner ]; then
+ echo "ERROR amdump Can't execute $amlibexecdir/planner" >> $logdir/log
+fi
+if [ ! -x $amlibexecdir/driver ]; then
+ echo "ERROR amdump Can't execute $amlibexecdir/driver" >> $logdir/log
+fi
+
+# shells don't do well with handling exit values from pipelines, so we emulate
+# a pipeline in perl, in such a way that we can combine both exit statuses in a
+# kind of logical "OR".
+@PERL@ - $amlibexecdir/planner $amlibexecdir/driver $conf $date_starttime "$@" <<'EOPERL'
+use IPC::Open3;
+use POSIX qw(WIFEXITED WEXITSTATUS);
+my ($planner, $driver, $conf, $date_starttime, @args) = @ARGV;
+
+open3("</dev/null", \*PIPE, ">&STDERR", $planner, $conf, '--starttime', $date_starttime, @args)
+ or die "Could not exec $planner: $!";
+open3("<&PIPE", ">&STDOUT", ">&STDERR", $driver, $conf, @args)
+ or die "Could not exec $driver: $!";
+
+my $first_bad_exit = 0;
+for (my $i = 0; $i < 2; $i++) {
+ my $dead = wait();
+ die("Error waiting: $!") if ($dead <= 0);
+ my $exit = WIFEXITED($?)? WEXITSTATUS($?) : 1;
+ $first_bad_exit = $exit if ($exit && !$first_bad_exit)
+}
+exit $first_bad_exit;
+EOPERL
exit_code=$?
[ $exit_code -ne 0 ] && exit_status=$exit_code
printf '%s: end at %s\n' "amdump" "`date`"
# Send out a report on the dumps.
-$sbindir/amreport$SUF $conf "$@"
+$sbindir/amreport $conf --from-amdump "$@"
exit_code=$?
[ $exit_code -ne 0 ] && exit_status=$exit_code
# Roll the log file to its datestamped name.
-$amlibexecdir/amlogroll$SUF $conf "$@"
+$amlibexecdir/amlogroll $conf "$@"
exit_code=$?
[ $exit_code -ne 0 ] && exit_status=$exit_code
# Trim the log file to those for dumps that still exist.
-$amlibexecdir/amtrmlog$SUF $conf "$@"
+$amlibexecdir/amtrmlog $conf "$@"
exit_code=$?
[ $exit_code -ne 0 ] && exit_status=$exit_code
# Trim the index file to those for dumps that still exist.
-$amlibexecdir/amtrmidx$SUF $conf "$@"
+$amlibexecdir/amtrmidx $conf "$@"
exit_code=$?
[ $exit_code -ne 0 ] && exit_status=$exit_code
ndays=`expr $days - 1`
mv $errfile.$ndays $errfile.$days
exit_code=$?
- echo $exit_code
[ $exit_code -ne 0 ] && exit_status=$exit_code
days=$ndays
done