⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 amcleanup.sh

📁 开源备份软件源码 AMANDA, the Advanced Maryland Automatic Network Disk Archiver, is a backup system that a
💻 SH
字号:
#!@SHELL@## Amanda, The Advanced Maryland Automatic Network Disk Archiver# Copyright (c) 1991-1998 University of Maryland at College Park# All Rights Reserved.## Permission to use, copy, modify, distribute, and sell this software and its# documentation for any purpose is hereby granted without fee, provided that# the above copyright notice appear in all copies and that both that# copyright notice and this permission notice appear in supporting# documentation, and that the name of U.M. not be used in advertising or# publicity pertaining to distribution of the software without specific,# written prior permission.  U.M. makes no representations about the# suitability of this software for any purpose.  It is provided "as is"# without express or implied warranty.## U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M.# BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.## Author: James da Silva, Systems Design and Analysis Group#			   Computer Science Department#			   University of Maryland at College Park### amcleanup.sh - clean up and generate a report after a crash.prefix="@prefix@"exec_prefix="@exec_prefix@"sbindir="@sbindir@"amlibexecdir="@amlibexecdir@". "${amlibexecdir}/amanda-sh-lib.sh"confdir=@CONFIG_DIR@# add sbin and ucb dirsPATH="$PATH:/usr/sbin:/sbin:/usr/ucb"export PATHUSE_VERSION_SUFFIXES="@USE_VERSION_SUFFIXES@"if test "$USE_VERSION_SUFFIXES" = yes; then        SUF=-@VERSION@else        SUF=fi##Function to :#   parse process tree and get the children of a given process ID#find_children() {#sample ps -ef output#500      20810  4938  0 10:21 pts/2    00:00:00 /bin/sh /usr/sbin/amdump tapebackup	for pid in $(ps -ef | awk "{if ( \$3 == $1 ) { print \$2 }}")	do		process_name=`ps -e|grep -w ${pid}|awk '{print $4}'`		echo `_ '%s: Process %s found running at pid #%s.' "amcleanup" "${process_name}" "${pid}"`		pidname[$i]=$pid		i=`expr $i + 1`		find_children $pid	done}##Function to :#   send SIGTERM signal to kill given process ID and check if process still alive #   after receiving SIGTERM,  if yes send SIGKILL  #function killpid() {killPID=$1SIGTERM=15	echo `_ '%s: Sending process %s the %s signal.' "$0" "${killPID}" "SIGTERM"`	`kill -${SIGTERM} ${killPID} 2>/dev/null`	for second in 0 1 2 3 4 ; do		pid_status=`ps -e|grep -w ${killPID}|grep -v grep |wc -l`		if [ ${pid_status} -ne 0 ] ; then			# process is still alive			sleep 1		else			return 0		fi	done	SIGKILL=9	echo `_ '%s: Sending process %s the %s signal.' "$0" "${killPID}" "SIGKILL"`	`kill -${SIGKILL} ${killPID} 2>/dev/null`	sleep 2	pid_status=`ps -e|grep -w ${killPID}|grep -v grep |wc -l`	if [ ${pid_status} -ne 0 ] ; then		return 1	else		return 0	fi}# process argumentsKILL_ENABLE=0VERBOSE=0while test $# -ge 2; do    case "$1" in	-k) KILL_ENABLE=1;;	-v) VERBOSE=1;;	*)	    echo `_ 'Usage: amcleanup [-k] [-v] conf'`	    exit 1 ;;    esac    shiftdoneconf="$1"shiftif test ! -d $confdir/$conf ; then	echo `_ '%s: could not cd into %s' "amcleanup" "$confdir/$conf"`	exit 1fi#check if amdump/amflush is running for given config  if test ${KILL_ENABLE} -eq 0 ; then	for am_process in amdump amflush ; do		am_pid=`ps -ef|grep -w ${am_process}|grep -w ${conf}|awk '{print $2}'`		if test ! -z "${am_pid}" ; then			echo `_ '%s: %s Process is running at PID %s for %s configuration.' "$0" "${am_process}" ${am_pid} ${conf}`			echo `_ '%s: Use -k option to stop all the process...' "$0"`			echo `_ 'Usage: amcleanup [-k] conf'`			exit 0		fi	doneficd $confdir/$conflogdir=`amgetconf$SUF $conf logdir "$@"`rc=$?if test $rc -ne 0 ; then	echo `_ '%s: "%s" exited with status: %s' "amcleanup" "amgetconf$SUF logdir" "$rc"` 1>&2	exit 1filogfile=$logdir/logerrfile=$logdir/amdumperramflush=$logdir/amflushtapecycle=`amgetconf$SUF $conf tapecycle "$@"`rc=$?if test $rc -ne 0 ; then	echo `_ '%s: "%s" exited with status: %s' "amcleanup" "amgetconf$SUF tapecycle" "$rc"` 1>&2	exit 1fidumpuser=`amgetconf$SUF $conf dumpuser "$@"`rc=$?if test $rc -ne 0 ; then	echo `_ '%s: "%s" exited with status: %s' "amcleanup" "amgetconf$SUF $conf dumpuser" "$rc"` 1>&2	exit 1fiif test ${KILL_ENABLE} -eq 1 ; then	#check if any one of the dumps are runing, if yes get the process tree and kill them        for am_process in amdump amflush ; do                unset pidname                am_pid=`ps -ef|grep -w ${am_process}|grep -w ${conf}|awk '{print $2}'`                #echo "checking children for ${am_pid}"                if test ! -z "${am_pid}" ; then                        find_children ${am_pid}                fi                KILL_FAILURES=0		i=0                while test ${#pidname[@]} -gt $i ; do                        mypid=`ps -e|grep -w ${pidname[$i]}|grep -v grep|wc -l`                        if [ ${mypid} -ne 0 ] ; then                                killpid ${pidname[$i]}                                rc=$?                                if test $rc -ne 0 ; then                                        KILL_FAILURES=`expr ${KILL_FAILURES} + 1`                                fi                        else                                echo `_ '%s: Process %s no longer running.  Skipping...' "$0" "${pidname[$i]}"`                        fi			i=`expr $i + 1`                done        if test ${#pidname[@]} -gt 0 ; then                echo `_ '%s: %s Amanda processes were found running.' "$0" "${#pidname[@]}"`                echo `_ '%s: %s processes failed to terminate.' "$0" "${KILL_FAILURES}"`        fi        donefiretstatus=0if test -f $logfile ; then	echo `_ '%s: processing outstanding log file.' "$0"`	exec </dev/null >/dev/null 2>&1	amreport$SUF $conf "$@"	rc=$?	if test $rc -ne 0 ; then		echo `_ '%s: "%s" exited with status: %s' "$0" "amreport" "$rc"` 1>&2		retstatus=`expr $retstatus + 1`	fi	# Roll the log file to its datestamped name.	amlogroll$SUF $conf "$@"	rc=$?	if test $rc -ne 0 ; then		echo `_ '%s: "%s" exited with status: %s' "$0" "amlogroll" "$rc"` 1>&2		retstatus=`expr $retstatus + 2`	fi	# Trim the index file to those for dumps that still exist.	amtrmidx$SUF $conf "$@"	rc=$?	if test $rc -ne 0 ; then		echo `_ '%s: "%s" exited with status: %s' "$0" "amtrmidx" "$rc"` 1>&2		retstatus=`expr $retstatus + 4`	fielse	echo `_ '%s: no unprocessed logfile to clean up.' "$0"`fiif test -f $errfile ; then    # if log was found, this will have been directed to /dev/null,    # which is fine.    echo `_ '%s: %s exists, renaming it.' "$0" "$errfile"`    # Keep debug log through the tapecycle plus a couple days    maxdays=`expr $tapecycle + 2`    days=1    # First, find out the last existing errfile,    # to avoid ``infinite'' loops if tapecycle is infinite    while test $days -lt $maxdays  && test -f $errfile.$days ; do	days=`expr $days + 1`    done    # Now, renumber the existing log files    while test $days -ge 2 ; do	ndays=`expr $days - 1`	mv $errfile.$ndays $errfile.$days	days=$ndays    done    mv $errfile $errfile.1fiif test -f $erramflush ; then    # if log was found, this will have been directed to /dev/null,    # which is fine.    echo `_ '%s: %s exists, renaming it.' "$0" "$erramflush"`    # Keep debug log through the tapecycle plus a couple days    maxdays=`expr $tapecycle + 2`    days=1    # First, find out the last existing erramflush,    # to avoid ``infinite'' loops if tapecycle is infinite    while test $days -lt $maxdays  && test -f $erramflush.$days ; do	days=`expr $days + 1`    done    # Now, renumber the existing log files    while test $days -ge 2 ; do	ndays=`expr $days - 1`	mv $erramflush.$ndays $erramflush.$days	days=$ndays    done    mv $erramflush $erramflush.1fiv=''if test $VERBOSE -eq 1; then    v='-v'fi$amlibexecdir/amcleanupdisk $v $conf "$@"rc=$?if test $rc -ne 0 ; then	echo `_ '%s: "%s" exited with status: %s' "$0" "amcleanupdisk" "$rc"` 1>&2	retstatus=`expr $retstatus + 8`fiexit $retstatus

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -