On Fri, Jan 10, 2003 at 11:14:55AM +0000, Pavel Rabel wrote:
> > > >Can amanda send a signal to my DLT IV to unload the tape after backups
> > > >are finished, so whoever goes back to swap tapes can just do it without
> > > >waiting to manually unload?
>
> > For amdump this is easy.
> >
> > I didn't find a way to do this for amflush.
> >
> > You must start amflush in the forground in order to answer the
> > questions, and then it backgrounds itself. So you do not know when
> > amflush really ends.
>
> You may try to run amflush with the -f switch.
Pavel, Sven, others ...
Check if the attached script will help.
I've called it "ampwait", AManda Process WAIT.
By default it checks every 60 seconds for a running amflush.
The period between checks (granularity) can be set with a "-g seconds" option
and the program to wait for can also be specified as a command line argument.
Any additional arguments are a program to execute upon completion of amflush.
An example of usage might be:
$ amflush DailySet1
<answer questions>
$ ampwait -g 20 amflush amtape DailySet1 eject
Alternatively run just 'ampwait' which defaults to '-g 60 amflush' and
run the amtape command separately when ampwait completes.
HTH
jon
--
Jon H. LaBadie [EMAIL PROTECTED]
JG Computing
4455 Province Line Road (609) 252-0159
Princeton, NJ 08540-4322 (609) 683-7220 (fax)
#!/usr/bin/ksh
#!/usr/bin/bash
# flushwait:
# wait until a detached command like amflush has completed
# requires a POSIX compatible shell like ksh or bash
#
# Default program to wait for: amflush (specified with cmd line arg)
# Default checking granularity: 60 seconds (time between checks - specified with -g
<seconds>)
# Default command to execute: none, but remaining arguments will be executed at end
# uncomment for debugging
# set -x
# PS4='[$LINENO] '
ProgName=${0##*/}
usage() {
echo "Usage: ${ProgName} [-g <seconds between checks>] [prog to wait for [cmd to
run]]" >&2
exit 1
}
# defaults
ProgToWaitFor=amflush
Granularity=60
# check for -g option
case "${1}" in
-g) Granularity=${2}
shift
shift
;;
-g*) Granularity=${1#-g}
shift
;;
-*|+*) echo "${ProgName}: ${1}: Invalid option" >&2
usage
;;
esac
# check that granularity is numeric
if echo "${Granularity}" | grep '^[0-9][0-9]*$' > /dev/null 2>&1
then
:
else
echo "${ProgName}: ${Granularity}: granularity must be an integer" >&2
exit 1
fi
# check for alternate program to wait for instead of amflush
if [ "${1}" != "" ]
then
ProgToWaitFor="${1}"
shift
fi
# Any remaining arguments will be executed at end,
# after ProgToWaitFor completes
# It is assumed that ProgToWaitFor is already running
# Gets its process id number now. There could be multiple
# instances; all must complete for this program to end
ProgPid=$(ps -e | grep "[ /]${ProgToWaitFor}$" | awk '{print $1}')
if [ "${ProgPid}" = "" ]
then
echo "${ProgName}: '${ProgToWaitFor}': no instance of this program running" >&2
exit 1
fi
# echo PID is $ProgPid # debugging info
# kill -0 tests for the existance of a the process
# both kill and sleep are builtin commands in most posix shells
# so no extra processes are generated by this loop
while kill -0 ${ProgPid} 2> /dev/null
do
sleep ${Granularity}
done
# echo $ProgToWaitFor is complete
"${@}"