No
I need a solution
Hi to All.
I have the same problem as https://www-secure.symantec.com/connect/forums/getting-error-bpstartnotify-failed-73-please-i-need-solution . Do you know the solution???
I share he bpstart_notify:
# cat bpstart_notify
#!/bin/sh
# ####################################################################
# # COPYRIGHT Ericsson AB 2005 - 2010
# #
# # The copyright to the computer program(s) herein is the property
# # of ERICSSON AB, Sweden. The programs may be used
# # and/or copied only with the written permission from ERICSSON
# # AB or in accordance with the terms and conditions
# # stipulated in the agreement/contract under which the program(s)
# # have been supplied.
# #
# ####################################################################
#
#------ History --------------------------------------------------------------------------
# Rev Date Prepared Description
#
# R1A 20040602 First version
# R1B 20050816 lmckhte Turn on fast resynch when license is valid.
# R1C 20050908 enoemcl Use VXLICENSE variable instead of vxlicense -p. i.e. support R3 vxlicrep
# look for FASTRESYNC in Solaris 8 and FlashSnap in Solaris 9
# R1D 20060201 lmcphta Enabled SNMS always and updatred fastresync code
# R1E 20080314 enoemcl Merged niq bpstart notify. Added SNMS 5.0 support.
# R1F 20080414 eeitfy NIQ Statistics x86 support
# R1F 20080513 efrador Solaris x86 support
# R1G 20080523 enoemcl Improve hacs/framework stream handling
# R1H 20080606 enoemcl Handle OSS_HARS_<hostname> Policies.
# R1J 20081006 enoemcl Incorporate NIQ_Backup changes; Convert to bourne shell
# R1K 20081104 enoemcl First stream might be stream X not always stream 1.
# R1L 20081111 enoemcl Define SAVE_CONFIG for NIQ Sparc ROOT-Policy.
# R1M 20080204 enoemcl Update check on fastresync license.
# R1N 20080210 enoemcl If any abort sitution occurs, ensure cleanup backup runs.
# R1P 20080215 enoemcl If fastsync not enabled(licensed), ensure feature=off on vols.
# R1Q 20080302 enoemcl Fix for fastsync endable/disable code (process all vols).
# R1R 20090508 enoemcl nbuClient now in sparc/ or x86/ subdirectory. OMBSC_PLATFORM var.
# R1S 20090529 enoemcl Set NET_BUFFER_SZ if not already done.
# R1T 20090702 efrador Introduction of BMRclient for OSS Suites and NIQ.
# R1U 20091215 enoemcl Support new policy names (DATA/ROOT)
# R1V 20100527 enoemcl Update save_vxvm_info; specify path /ericsson/ombsc/backup
# R1W 20100807 enoemcl Attempt to recover from OMBS on Solaris X86 HACS issue.
# R1X 20101002 enoemcl Add Eniq Events and OSS on X86 support to this script.
# R1y 28102010 ebahram change the ALT_SAVE_CONFIG for Enig Events.
# R1Z 15112020 ebahram All events scripts need /usr/bin/bash prefix!?
#
#------ Purpose --------------------------------------------------------------------------
#
# bpstart_notify.sh
#
# This script is called by NetBackup when bpbkar is started up on the client to do a
# or a archive. The code here is ERICSSON OMBS Policy code.
#
#-----------------------------------------------------------------------------------------
#env
OMBSC_HOME=/ericsson/ombsc
#cmds
AWK=/usr/bin/awk
BASENAME=/usr/bin/basename
BC=/usr/bin/bc
CAT=/usr/bin/cat
CUT=/usr/bin/cut
CP=/usr/bin/cp
DATE=/usr/bin/date
DIRNAME=/usr/bin/dirname
DF=/usr/sbin/df
ECHO=/usr/bin/echo
EGREP=/usr/bin/egrep
ENV=/usr/bin/env
EXPR=/usr/bin/expr
GETENT=/usr/bin/getent
GREP=/usr/bin/grep
HEAD=/usr/bin/head
HOSTNAME=/usr/bin/hostname
ID=/usr/bin/id
KSH=/usr/bin/ksh
LS=/usr/bin/ls
METASTAT=/usr/sbin/metastat
MKDIR=/usr/bin/mkdir
MORE=/usr/bin/more
MV=/usr/bin/mv
NAWK=/usr/bin/nawk
PKGINFO=/usr/bin/pkginfo
PWD=/usr/bin/pwd
PS=/usr/bin/ps
RM=/usr/bin/rm
SED=/usr/bin/sed
SLEEP=/usr/bin/sleep
SORT=/usr/bin/sort
SU=/usr/bin/su
SYNC=/bin/sync
TAIL=/usr/bin/tail
TEE=/usr/bin/tee
TOUCH=/usr/bin/touch
TPUT=/usr/bin/tput
UNAME=/usr/bin/uname
USERADD=/usr/sbin/useradd
UNIQ=/usr/bin/uniq
VOLD=/usr/sbin/vold
VXPRINT=/usr/sbin/vxprint
VXVOL=/usr/sbin/vxvol
VXDISK=/usr/sbin/vxdisk
VXLICENSE=/opt/VRTSvxvm/bin/vxlicense
VXLICREP=/sbin/vxlicrep
VXLICTEST=/sbin/vxlictest
VXTASK=/usr/sbin/vxtask
WC=/usr/bin/wc
HAGRP=/opt/VRTS/bin/hagrp
#********************************************************************
# Environment
#********************************************************************
OMBS_COMMON=/ericsson/ombs_common
TPP_HOME=/usr/openv/netbackup
OUTF1=${TPP_HOME}/bin/BPSTART_CALLED
OUTF2=${TPP_HOME}/bin/BPEND_CALLED
# Save the parameters
BKUP_CLIENT=${1}
POLICY_ID=${2}
SCHED_NAME=${3}
SCHED_TYPE=${4}
[ -z "${STREAM_COUNT}" ] && STREAM_COUNT=0
[ -z "${STREAM_NUMBER}" ] && STREAM_NUMBER=0
###Quit if hot catalog###
echo "${POLICY_ID}" | egrep -i "catalog|hot_catalog" >/dev/null 2>&1
if [ ${?} -eq 0 ]
then
exit 0
fi
# Save the time of running.
RUN_TIME=` $DATE '+%Y-%b-%d_%H.%M.%S' `
[ -z "${BPSTART_TIMEOUT}" ] && BPSTART_TIMEOUT=1440
#********************************************************************
# Configuration Section
#********************************************************************
OS_VERSION=` $UNAME -r | $CUT -c3-4 `
BPCONF=/usr/openv/netbackup/bp.conf
BP_CLIENT_NAME=` $CAT ${BPCONF} | $EGREP '^[ ]*CLIENT_NAME[ ]*=' | $NAWK -F\= '{print $2}' | $SED -e 's| ||g' `
THIS_HOST=`hostname`
#X86?
I386=`$UNAME -p|grep -w i386`
if [ "${I386}" ]
then
OMBSC_PLAT=i386
else
OMBSC_PLAT=sparc
fi
###Just in case ERICombsc was not upgraded yet.###
if [ ! -d "${OMBSC_HOME}/bin/${OMBSC_PLAT}" ]
then
OMBSC_PLAT=x86
if [ ! -d "${OMBSC_HOME}/bin/${OMBSC_PLAT}" ]
then
OMBSC_PLAT=""
fi
fi
#*********************************************
# Log handling and Stream handling
#*********************************************
##Flag to determine whether to compress log or not (y or n)
COMPRESS_LOG=n
#Number of log files to keep
NUM_LOGS=10
#Size in kbytes that the log file is allowed to grow to
SIZE_LOGS=2048000
#**************************
# Pre execution operations
#**************************
ABORTING_BACKUP=false
DEBUG_MODE=0
DEBUG_FLAG_FILE=/tmp/bpstart_debug_mode
if [ -f "${DEBUG_FLAG_FILE}" ]
then
DEBUG_MODE=1
fi
#-------------------------------#
#-------------------------------#
# First, the Common Functions #
#-------------------------------#
#-------------------------------#
### Peek at temp_sched_dir contents
###
peek_at_temp_sched_dir()
{
L_PEEK_DEBUGMODE=$1
if [ "${DEBUG_MODE}" -eq 0 ]
then
return 0
fi
if [ "${L_PEEK_DEBUGMODE}" -eq 1 ]
then
if [ -d "${TEMP_SCHED_DIR}" -a -f "${LOGFILE}" ]
then
echo >> ${LOGFILE}
echo "-> Contents of [${TEMP_SCHED_DIR}/]" >> ${LOGFILE}
$LS ${TEMP_SCHED_DIR} >> ${LOGFILE}
if [ -d "${TEMP_SCHED_DIR}/run" ]
then
echo "-> Contents of [${TEMP_SCHED_DIR}/run]" >> ${LOGFILE}
$LS ${TEMP_SCHED_DIR}/run >> ${LOGFILE}
fi
echo >> ${LOGFILE}
fi
fi
return 0
}
### Function: abort_script ###
# This will is called if the script is aborted thru an error
# error signal sent by the kernel such as CTRL-C or if a serious
# error is encountered during runtime
#
# Arguments:
# $1 - Error message from part of program
# $2 - Return Code
#
# Return Values:
# none
###
abort_script()
{
if [ "$1" ]
then
_err_msg_="$1 [rc=$2]"
else
echo "Stream $STREAM_NUMBER: Trapped Interrupt `$DATE`)" >>${LOGFILE}
_err_msg_="Script aborted.......[rc=$2]\n"
fi
if [ "${LOGFILE}" ]
then
if [ ! -f "${LOGFILE}" ]
then
chk_create_logfile 2>/dev/null
fi
echo "\n${_err_msg_}\n" >> ${LOGFILE}
else
echo "\n${_err_msg_}\n"
fi
unset _err_msg_
echo ${OMBS_POLICY_ID} | $EGREP "SNMS|OSS|ENIQ_STATS|ENIQ_EVENTS|_VX" >/dev/null 2>&1
if [ $? -eq 0 ] && [ ${STREAM_NUMBER} != 0 ]
then
peek_at_temp_sched_dir 1
cd $SCRIPTHOME
#*************************************************#
# Seems we cannot assume STREAM 1 is first Stream #
#*************************************************#
$MKDIR -p ${TEMP_SCHED_DIR} 2>/dev/null
if [ ! -f ${TEMP_SCHED_DIR}/first_stream ]
then
#---------------------------------#
# ok, lets try to be first stream #
#---------------------------------#
echo $STREAM_NUMBER >${TEMP_SCHED_DIR}/first_stream 2>/dev/null
fi
#---------------------------------------------#
# Confirm who is first (was someone quicker?) #
#---------------------------------------------#
FIRST_STREAM=` $CAT ${TEMP_SCHED_DIR}/first_stream | $BC `
${ECHO} "I am stream [$STREAM_NUMBER], First stream is [$FIRST_STREAM] ..." >> ${LOGFILE}
if [ -f "${ABORT_FILE}" ] || [ $STREAM_NUMBER -eq $FIRST_STREAM ]
then
case ${OMBS_POLICY_ID} in
_SNMS) ###Cleanup for SNMS Backup###
${PS} -ef | $GREP "${SNMS_BACKUP} -d" | $GREP -v grep >/dev/null 2>&1
if [ $? -ne 0 ]
then
${SNMS_BACKUP} -d >>${LOGFILE} 2>&1
ABORTING_BACKUP=true
fi
;;
*) ABORTING_BACKUP=true
;;
esac
if [ "${ABORTING_BACKUP}" = true ]
then
echo "Stream: [${STREAM_NUMBER}]:" >>${LOGFILE}
if [ -d ${TEMP_SCHED_DIR} ]
then
if [ ! -f "${ABORT_FILE}" ]
then
$TOUCH ${ABORT_FILE} 2>&1
echo "- created [${ABORT_FILE}] to abort backup!" >>${LOGFILE}
fi
if [ -f ${TEMP_SCHED_DIR}/backup_prepared ]
then
echo "- removing file [${TEMP_SCHED_DIR}/backup_prepared]" >>${LOGFILE}
$RM ${TEMP_SCHED_DIR}/backup_prepared 2>/dev/null
fi
else
echo "- Directory [${TEMP_SCHED_DIR}] not found." >>${LOGFILE}
fi
fi
fi
fi
if [ ${STREAM_NUMBER} != 0 ]
then
#-------------------------------------------------------------------------------------#
# For multi-stream backups, merge bpstart_notify.<x> to main bpstart_notify_log file. #
#-------------------------------------------------------------------------------------#
touch ${LOGDIR}/${LOGNAME} 2>/dev/null
$CAT ${LOGFILE} >>${LOGDIR}/${LOGNAME} 2>/dev/null
$RM ${LOGFILE} 2>/dev/null ##delete bpstart_notify_log.<num>#
else
$MV ${LOGFILE} ${LOGFILE}.aborted.${RUN_TIME} 2>/dev/null
fi
if [ "$2" ]
then
exit ${2}
else
exit 919
fi
}
### Function: check_id ###
# Check that the effective id of the user is correct
# If not print error msg and exit.
#
# Arguments:
# $1 : User ID name
# Return Values:
# none
###
check_id()
{
_check_id_=` $ID | $AWK -F\( '{print $2}' | $AWK -F\) '{print $1}' `
if [ "$_check_id_" != "$1" ]
then
_err_msg_="You must be $1 to execute this script."
abort_script "$_err_msg_" 201
fi
return 0
}
### Function: chk_create_logfile ###
# Check/Create Logfile
#
# Arguments:
# none
# Return Values:
# none
##
chk_create_logfile()
{
$MKDIR -p ` $DIRNAME ${LOGFILE} `
if [ $? -ne 0 ]
then
unset LOGFILE
_err_msg_="Could not create directory `$DIRNAME ${LOGFILE}`"
abort_script "$_err_msg_" 202
fi
$TOUCH -a ${LOGFILE}
if [ $? -ne 0 ]
then
unset LOGFILE
_err_msg_="Could not write to file ${LOGFILE}"
abort_script "$_err_msg_" 203
fi
return 0
}
### Function: get_absolute_path ###
# Determine absolute path to software
#
# Arguments:
# none
# Return Values:
# none
###
get_absolute_path()
{
_dir_=` $DIRNAME $0 `
SCRIPTHOME=` cd $_dir_ 2>/dev/null && pwd || echo $_dir_ `
return 0
}
### Function: touch_bpstart_called ###
# Log the fact that backup is starting
#
# Arguments:
# none
# Return Values:
# none
touch_bpstart_called()
{
###Create/Overwrite BPSTART_CALLED file###
if [ ${STREAM_NUMBER} -eq 0 ]
then
echo >${OUTF1} 2>/dev/null
echo >${OUTF2} 2>/dev/null
else
if [ ! -f ${TEMP_SCHED_DIR}/first_stream ]
then
echo >${OUTF1} 2>/dev/null
echo >${OUTF2} 2>/dev/null
else
FIRST_STREAM=`$CAT ${TEMP_SCHED_DIR}/first_stream | $BC `
if [ ${STREAM_NUMBER} -eq $FIRST_STREAM ]
then
echo >${OUTF1} 2>/dev/null
echo >${OUTF2} 2>/dev/null
fi
fi
fi
echo >>${LOGFILE}
echo "[JOB ARRIVED]" >>${LOGFILE}
case ${SCHED_TYPE} in
FULL) echo >>${OUTF1}
echo "Full backup starting on ${BKUP_CLIENT}" >>${OUTF1}
echo "Full backup starting on ${BKUP_CLIENT}" >>${LOGFILE}
echo " - Policy ${POLICY_ID} Schedule ${SCHED_NAME} ${RUN_TIME}" >>${OUTF1}
;;
INCR) echo >>${OUTF1}
echo "Differential Incremental backup starting on ${BKUP_CLIENT}" >>${OUTF1}
echo "Differential Incremental backup starting on ${BKUP_CLIENT}" >>${LOGFILE}
echo " - Policy ${POLICY_ID} Schedule ${SCHED_NAME} ${RUN_TIME}" >>${OUTF1}
;;
CINC) echo >>${OUTF1}
echo "Cumulative Incremental backup starting on ${BKUP_CLIENT}" >>${OUTF1}
echo "Cumulative Incremental backup starting on ${BKUP_CLIENT}" >>${LOGFILE}
echo " - Policy ${POLICY_ID} Schedule ${SCHED_NAME} ${RUN_TIME}" >>${OUTF1}
;;
esac
#Save environment#
${ENV} >>${OUTF1} 2>/dev/null
echo "************************" >>${OUTF1}
echo >>${OUTF1}
echo >>${OUTF1}
return 0
}
chk_args()
{
#--------------------------------------#
# Ensure we have sufficient arguments. #
#--------------------------------------#
if [ ${#} != 4 ]
then
echo "-- Date: ${RUN_TIME} --" >>${OUTF1} 2>/dev/null
echo "Args: [${*}]" >>${OUTF1} 2>/dev/null
printf "\n[ ` $BASENAME ${0}` ) needs 4 args!]\n" >>${OUTF1} 2>/dev/null
echo "--" >>${OUTF1} 2>/dev/null
_err_msg_="The script [$0], requires 4 args."
abort_script "$_err_msg_" 216
fi
return 0
}
cancel_backup_prepare()
{
# This may be because stream one failed or because the file is left
# hanging around from a previous run so we should quit!
echo "============================================================" >> ${LOGFILE}
echo "============================================================" >> ${LOGFILE}
echo "PREPARATION FOR BACKUP CANCELLED AT `$DATE`." >> ${LOGFILE}
echo "FILE ${ABORT_FILE} DETECTED" >> ${LOGFILE}
echo "============================================================" >> ${LOGFILE}
echo "============================================================" >> ${LOGFILE}
peek_at_temp_sched_dir 1
echo "Stream [$STREAM_NUMBER]: Found [${ABORT_FILE}]" >> ${LOGFILE}
_err_msg_="- The last backup did not cleanup OR a stream aborted backup (check bpend logfile)."
abort_script "$_err_msg_" 127
return 0
}
check_for_timed_out_streams()
{
#********************************************#
# Cancel backup if a recent stream timed out #
#********************************************#
A_FILE=${LOGDIR}/${LOGNAME}
if [ -f ${A_FILE} ]
then
$GREP "timed out waiting for backup" ${A_FILE} >/dev/null 2>&1
if [ $? -eq 0 ]
then
$TOUCH ${ABORT_FILE} 2>/dev/null
echo "Stream: ${STREAM_NUMBER}" >>${LOGFILE}
echo "- Found a timed out stream in [${A_FILE}]" >>${LOGFILE}
TIMED_OUT=`$GREP "timed out waiting for" ${A_FILE} |$SORT |$UNIQ |$AWK '{print $2}' `
for A_VAL in $TIMED_OUT
do
if [ -f ${A_FILE}.${A_VAL} ]
then
$CAT ${A_FILE}.${A_VAL} >>${A_FILE} 2>/dev/null
$RM ${A_FILE}.${A_VAL} 2>/dev/null
fi
if [ -f ${LOGDIR}/bpend_notify_log.${A_VAL} ]
then
$CAT ${LOGDIR}/bpend_notify_log.${A_VAL} >>${LOGDIR}/bpend_notify_log
$RM ${LOGDIR}/bpend_notify_log.${A_VAL} 2>/dev/null
fi
echo "--> Found failed stream: [${A_VAL}]" >>${LOGFILE}
done
cancel_backup_prepare
fi
fi
return 0
}
loop_until_backup_is_prepared()
{
###Did another Stream timeout?###
if [ -f ${ABORT_FILE} ]
then
cancel_backup_prepare
fi
#********************************************************************#
# Loop until ready to proceed. I will try for limited amount of time #
# until backup preparation is ready. If time exceeds then error. #
#********************************************************************#
_loop_count_=1
if [ ${STREAM_NUMBER} -gt 60 ]
then
_sleep_cntr_=`$EXPR ${STREAM_NUMBER} - 60`
else
_sleep_cntr_=`$EXPR ${STREAM_NUMBER} + 5`
fi
###Do not proceed until backup is prepared or aborted (other stream)###
while [ -d ${TEMP_SCHED_DIR} -a ! -f ${TEMP_SCHED_DIR}/backup_prepared ]
do
if [ ${_loop_count_} -eq 1 ]
then
$ECHO
$ECHO ". . waiting for backup preparation . . " >> ${LOGFILE}
fi
_loop_count_=`$EXPR ${_loop_count_} + 1`
if [ ${_loop_count_} -ge ${BPSTART_TIMEOUT} ]
then
_err_msg_="Stream ${STREAM_NUMBER} timed out waiting for backup preparation"
abort_script "$_err_msg_" 100
fi
if [ ${DEBUG_MODE} -eq 1 ]
then
$ECHO "Stream ${STREAM_NUMBER}: Wait $count `$DATE`." >> ${LOGFILE}
fi
if [ -f ${ABORT_FILE} ]
then
break
fi
$SLEEP ${_sleep_cntr_}
done
$ECHO "Stream ${STREAM_NUMBER}: Waited `$EXPR ${_sleep_cntr_} \* ${_loop_count_} `secs." >>${LOGFILE}
###Did any Stream abort?###
check_for_timed_out_streams
if [ -f ${TEMP_SCHED_DIR}/backup_prepared ]
then
###The Stream can proceed now###
$ECHO "Stream ${STREAM_NUMBER} with backup id ${BACKUPID} started at `$DATE`" >> ${LOGFILE}
$ECHO "${BACKUPID}" >> ${TEMP_SCHED_DIR}/run/${STREAM_NUMBER}.startfile
_num_procs_done_=` $LS ${TEMP_SCHED_DIR}/run/*.startfile | $WC -l | $BC 2>/dev/null `
if [ ${_num_procs_done_} -ge $STREAM_COUNT ]
then
$ECHO "Stream ${STREAM_NUMBER} deemed to be last bpstart (to execute) at `$DATE`" >> ${LOGFILE}
$TOUCH "${TEMP_NODE_DIR}/last_bpstart"
else
$ECHO "Stream ${STREAM_NUMBER} is not last bpstart (to execute) at `$DATE`" >>${LOGFILE}
fi
else
###We should quit###
_err_msg_="Stream ${STREAM_NUMBER} is quitting because backup preparation is not done"
abort_script "$_err_msg_" 130
fi
return 0
}
### Function: printlog_job_header ###
# Print a header to log
# Arguments: none
# Return Values: 0
###
printlog_job_header()
{
printf "\n*********************************************************************************" >>${LOGFILE} 2>&1
printf "\nJob: [${1}] [${2}] [${3}] [${4}] @ ${RUN_TIME}" >>${LOGFILE} 2>&1
printf "\n***********************************************************************************" >>${LOGFILE} 2>&1
if [ "${STREAM_NUMBER}" ]
then
printf "\nStream:\t${STREAM_NUMBER} of ${STREAM_COUNT}\n" >>${LOGFILE} 2>&1
fi
date >>${LOGFILE} 2>&1
echo >>${LOGFILE} 2>&1
return 0
}
### Function: rotate_compress_logs ###
#
# Rotate and compress the logs if necessary.
#
# Arguments:
# $1 - Logfile
# $2 - Num Logs to keep. This number is addition to the original log
# $3 - Size Log in Kbytes (0 means size not relevant. Rotation always occurs)
# $4 - Param to compress log or not (y/n)
# Return Values:
# 0 : Rotation sucessful
rotate_compress_logs()
{
# Save Params
_logfile_=${1}
_numlog_=${2}
_sizelog_kbytes_=${3}
_compress_log_=${4}
if [ ! "${_logfile_}" -o ! "${_numlog_}" -o ! "${_sizelog_kbytes_}" -o ! "${_compress_log_}" ]
then
echo "Incorrect Parameters supplied to function rotate_compress_logs"
return 1
fi
if [ ! -s "${_logfile_}" ]
then
return 0
fi
# Test for numeric
echo ${_numlog_} | $EGREP '[^0-9]' >> /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "Numeric value only for param 2 in function rotate_compress_logs"
return 1
fi
# Test for numeric
echo ${_sizelog_kbytes_} | $EGREP '[^0-9]' >> /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "Numeric value only for param 3 in function rotate_compress_logs"
return 1
fi
# Param must be either y/n
if [ "${_compress_log_}" != y -a "${_compress_log_}" != n ]
then
echo "Param 4 can only have (y/n) value in function rotate_compress_logs"
return 1
fi
# Is the _logfile_ big enough to need rotation
if [ ${_sizelog_kbytes_} -ne 0 ]
then
_chk_size_=`$LS -l ${_logfile_}|$NAWK '{print $5}'`
if [ ${_chk_size_} -lt ${_sizelog_kbytes_} ]
then
return 0
fi
fi
tem_file=/tmp/temfile.$$
# Loop until I get a file name that does not exist
while :
do
$LS ${tem_file} >> /dev/null 2>&1
if [ $? -ne 0 ]
then
break
fi
tem_file=${tem_file}.$$
done
$RM -f ${tem_file}
$LS ${_logfile_}_#*@* 2> /dev/null \
|$EGREP "${_logfile_}_#[1-9]+[0-9]*@[0-9]+-[0-9]+-[0-9]+.[0-9]+.[0-9]+.[0-9]+" \
|$SORT -t \# -k 2,2n > ${tem_file}
num_exist_log=` $CAT ${tem_file} | $WC -l | $BC 2>/dev/null `
if [ `$EXPR ${num_exist_log} + 1` -ge ${_numlog_} ]
then
_cnt_=0
for _file_ in `$CAT ${tem_file}`
do
_cnt_=`$EXPR ${_cnt_} + 1`
if [ ${_cnt_} -ge ${_numlog_} ]
then
$RM -f ${_file_}
fi
done
fi
$LS ${_logfile_}_#*@* 2> /dev/null \
|$EGREP "${_logfile_}_#[1-9]+[0-9]*@[0-9]+-[0-9]+-[0-9]+.[0-9]+.[0-9]+.[0-9]+" \
|$SORT -t \# -k 2,2nr > ${tem_file}
# Rotate the dumps
for _file_ in `$CAT ${tem_file}`
do
_file_num_=`echo ${_file_}|$NAWK -F\# '{print $2}'|$NAWK -F\@ '{print $1}'`
_new_file_num_=`$EXPR ${_file_num_} + 1`
_new_file_name_=`echo ${_file_}|$SED -e "s|#${_file_num_}@|#${_new_file_num_}@|"`
$MV -f ${_file_} ${_new_file_name_}
done
$RM -f ${tem_file}
_run_time_=`$DATE '+%Y-%m-%d_%H.%M.%S'`
$MV ${_logfile_} ${_logfile_}_#1@${_run_time_}
if [ "${_compress_log_}" = y ]
then
$COMPRESS -f ${_logfile_}_#1@${_run_time_} 2>/dev/null &
fi
return 0
}
### Function: solaris_client_checks ###
# If its Solaris, do a few SVM, X86 checks
# Arguments: none
# Return Values: 0
###
solaris_client_checks()
{
###Ensure a swap-device is configured on the client###
if [ ! -f /tmp/bpstart_noswapcheck ]
then
swap -l | grep -i "No swap devices configured" >/dev/null 2>&1
if [ $? -eq 0 ]
then
_err_msg_="No swap devices configured on this client, fix this situation!"
abort_script "$_err_msg_" 869
fi
fi
###This is for any Solaris client ###
if [ "${I386}" ]
then
if [ -s /lib/libc.so.1 ]
then
echo "Copying libc.so.1 to .save ........ `$DATE`" >>${LOGFILE}
###This is because of a limitation in Veritas Netbackup###
${MKDIR} -p /tmp/lib
mount -o nosub -F lofs /lib /tmp/lib
${CP} -p /tmp/lib/libc.so.1 /lib/libc.so.1.save 2>/dev/null
if [ $? -ne 0 ]
then
umount /tmp/lib
rmdir /tmp/lib
_err_msg_="Failure making copy of /lib/libc.so.1"
abort_script "$_err_msg_" 861
fi
umount /tmp/lib
rmdir /tmp/lib
else
_err_msg_="Could not locate /lib/libc.so.1 to make backup of"
abort_script "$_err_msg_" 862
fi
fi
if [ ! -s "${SAVE_CONFIG}" ]
then
_err_msg_="Could not locate [${SAVE_CONFIG}]"
if [ ! -s "${ALT_SAVE_CONFIG}" ]
then
abort_script "$_err_msg_" 204
fi
SAVE_CONFIG=${ALT_SAVE_CONFIG}
fi
###Save configuration of system for OMBS BMR###
L_CMD="/usr/bin/bash ${SAVE_CONFIG}"
${L_CMD} >>${LOGFILE} 2>&1
if [ $? -ne 0 ]
then
echo "[ombs rc=205] Error, command [ ${L_CMD} ] failed!" >>${LOGFILE} 2>&1
_err_msg_="Failure saving config data for Bare Metal Restore (ombs)."
abort_script "$_err_msg_" 205
fi
save_svm_info
###backup vfstab###
${CP} /etc/vfstab /etc/vfstab_bmr >/dev/null 2>&1
#-------------------------------------------------------------
# List filesystems that exist before executing bpstart_notify
#-------------------------------------------------------------
printf "\n\n*******************" >>${LOGFILE} 2>&1
printf "\nFilesystem Listing" >>${LOGFILE} 2>&1
printf "\n*******************\n\n" >>${LOGFILE} 2>&1
${DF} -h >>${LOGFILE} 2>&1
printf "\n====================================================================\n" >>${LOGFILE} 2>&1
return 0
}
### Function: streamed_data_policy ###
# Do what is required pre-backup of Multiple Stream DATA Policy #
# This operates on the principle that First STREAM_NUMBER will do #
# all the backup preparation. All other streams will sleep while#
# preparation is going on. #
#
# Arguments:
# none
# Return Values:
# none
##
streamed_data_policy()
{
_sleep_cntr_=0
# Check for command-line execution - are enough variables set. #
if [ -z "${STREAM_NUMBER}" ]
then
echo "No STREAM_NUMBER environment variable set!"
return 1212
fi
if [ -z "${STREAM_COUNT}" ]
then
echo "No STREAM_COUNT environment variable set!"
return 1213
fi
# Are multi-streams allowed for backup
if [ ${STREAM_NUMBER} -eq 0 ]
then
# Just one Stream is present #
echo "\n============================================================" >> ${LOGFILE}
echo "============================================================\n" >> ${LOGFILE}
echo "PREPARATION FOR SINGLE-STREAMED BACKUP STARTED AT `$DATE`." >> ${LOGFILE}
echo "\n============================================================" >> ${LOGFILE}
echo "============================================================\n" >> ${LOGFILE}
if [ ${DEBUG_MODE} -eq 1 ]
then
$ENV | $SED "s/^/Stream ${STREAM_NUMBER}: /" >> ${LOGFILE}
fi
###########################
### OMBS Policy Startup ###
###########################
echo ${OMBS_POLICY_ID} | grep "_ONBLADE_RAW" >/dev/null 2>&1
if [ $? -ne 0 ]
then
solaris_client_checks
fi
case ${OMBS_POLICY_ID} in
_SNMS) ###### SNMS ######
snms_prepare_for_backup
;;
*) ###### Other ######
${ECHO} "Multiple Streams should be enabled for this Policy" >>${LOGFILE}
;;
esac
################
###### OK #####
################
else
# More than one stream is present #
#**********************************************************************#
# Remove the end file for the stream (if exists). This is required for
# termination condition if we are on a retry scenario.
#**********************************************************************#
if [ -f ${TEMP_SCHED_DIR}/run/${STREAM_NUMBER}.endfile ]
then
if [ ${DEBUG_MODE} -eq 1 ]
then
echo "Stream ${STREAM_NUMBER}: REMOVED PREVIOUS ENDFILE at `$DATE`" >> ${LOGFILE}
fi
$RM -f ${TEMP_SCHED_DIR}/run/${STREAM_NUMBER}.endfile 2>/dev/null
fi
check_for_timed_out_streams
#*************************************************#
# Seems we cannot assume STREAM 1 is first Stream #
#*************************************************#
$MKDIR -p ${TEMP_SCHED_DIR} 2>/dev/null
if [ ! -f ${TEMP_SCHED_DIR}/first_stream ]
then
if [ -f ${TEMP_NODE_DIR}/secound_node ]
then
SECOUND_NODE=` $CAT ${TEMP_NODE_DIR}/secound_node`
if [ ${SECOUND_NODE} = ${BKUP_CLIENT} ]
then
#---------------------------------#
# do not need the prepare backup, make first stream to 0#
#---------------------------------#
echo 0 >${TEMP_SCHED_DIR}/first_stream 2>/dev/null
else
echo $STREAM_NUMBER >${TEMP_SCHED_DIR}/first_stream 2>/dev/null
fi
else
#---------------------------------#
# ok, lets try to be first stream #
#---------------------------------#
echo $STREAM_NUMBER >${TEMP_SCHED_DIR}/first_stream 2>/dev/null
fi
fi
#---------------------------------------------#
# Confirm who is first (was someone quicker?) #
#---------------------------------------------#
FIRST_STREAM=` $CAT ${TEMP_SCHED_DIR}/first_stream | $BC `
#********************#
# Am I first stream? #
#********************#
if [ $STREAM_NUMBER -eq $FIRST_STREAM ]
then
echo "First Stream deemed to be $STREAM_NUMBER" >>${LOGFILE}
#**********************************************************************#
# If so, prepare for backup
#**********************************************************************#
peek_at_temp_sched_dir 1
$MKDIR -p ${TEMP_SCHED_DIR}/run 2>/dev/null
###Did a Stream abort; Or last backup failed and cleanup did not occur?###
if [ -f ${ABORT_FILE} ]
then
cancel_backup_prepare
fi
# Okay prepare for backup
if [ ! -f ${TEMP_SCHED_DIR}/backup_prepared ]
then
echo "\n============================================================" >> ${LOGFILE}
echo "============================================================" >> ${LOGFILE}
echo "PREPARATION FOR MULTI-STREAMED BACKUP STARTED AT `$DATE`." >> ${LOGFILE}
echo "============================================================" >> ${LOGFILE}
echo "============================================================\n" >> ${LOGFILE}
if [ ${DEBUG_MODE} -eq 1 ]
then
$ENV | $SED "s/^/Stream ${STREAM_NUMBER}: /" >> ${LOGFILE}
echo "Stream ${STREAM_NUMBER}: Preparing for backup `$DATE`" >> ${LOGFILE}
fi
# Prepare for the backup
###########################
### OMBS Policy Startup ###
###########################
echo ${OMBS_POLICY_ID} | grep "_ONBLADE_RAW" >/dev/null 2>&1
if [ $? -ne 0 ]
then
solaris_client_checks
fi
save_vxvm_info
case ${OMBS_POLICY_ID} in
_ENIQ_EVENTS) ###### NIQ ENIQ_EVENTS ######
events_prepare_backup
;;
_ENIQ_STATS_MULTIBLADE_DATA) ###### NIQ Statistics ######
statistics_prepare_backup
;;
_ENIQ_STATS_ONBLADE_DATA) ###### NIQ Statistics ######
statistics_prepare_backup
;;
_ENIQ_STATS_ONBLADE_RAW) ###### NIQ Statistics ######
statistics_prepare_backup_raw
;;
_ENIQ_STATS) ###### NIQ Statistics ######
statistics_prepare_backup
;;
_SNMS) ###### SNMS ######
snms_prepare_for_backup
;;
_OSS|_HARS) ###### OSS_<hostname> and OSS_HARS_<hostname> Policies #####
oss_ss_detach_mount_offline_mirror
;;
_OSS_i386|_HACS|_DDS|_VX) # Cluster or Multi-Node (nbuclinet waits until 1st splits mirrors #
are_vxvm_mirrors_split_yet
failed_over_ha_check
case ${?} in
0)
FIRST_NODE=` $CAT ${TEMP_NODE_DIR}/first_node_${STREAM_COUNT} `
if [ "$FIRST_NODE" = "$BKUP_CLIENT" ]
then
oss_ss_detach_mount_offline_mirror
fi
;;
1) start_nbuclient_process
are_vxvm_mirrors_split_yet
;;
esac
;;
esac
################
###### OK #####
################
if [ $? -ne 0 ]
then
_err_msg_="Fault encountered preparing for backup"
abort_script "$_err_msg_" 934
fi
$TOUCH ${TEMP_SCHED_DIR}/backup_prepared
$TOUCH ${TEMP_NODE_DIR}/backup_prepared
if [ ${DEBUG_MODE} -eq 1 ]
then
echo "Stream ${STREAM_NUMBER}: Backup Prepared `$DATE`" >> ${LOGFILE}
fi
else
# This may be because stream one failed and is on a retry or could #
# be because the file is left hanging around from a previous run. #
echo "============================================================" >> ${LOGFILE}
echo "============================================================" >> ${LOGFILE}
echo "PREPARATION FOR BACKUP SKIPPED AT `$DATE`." >> ${LOGFILE}
echo "FILE ${TEMP_SCHED_DIR}/backup_prepared DETECTED" >> ${LOGFILE}
echo "============================================================" >> ${LOGFILE}
echo "============================================================" >> ${LOGFILE}
peek_at_temp_sched_dir 1
fi
else
##### This is not STREAM ONE #####
# Introduce some sort of randomness
if [ ${STREAM_NUMBER} -gt 60 ]
then
_sleep_cntr_=`$EXPR ${STREAM_NUMBER} - 60`
else
_sleep_cntr_=${STREAM_NUMBER}
fi
$SLEEP ${_sleep_cntr_}
if [ ${DEBUG_MODE} -eq 1 ]
then
$ENV | $SED "s/^/Stream ${STREAM_NUMBER}: /" >> ${LOGFILE}
echo "Stream ${STREAM_NUMBER}: Backup started on `$DATE`" >> ${LOGFILE}
peek_at_temp_sched_dir 1
fi
fi
fi
loop_until_backup_is_prepared
echo "Stream $STREAM_NUMBER: proceeding $BACKUPID `$DATE`" >>${LOGFILE}
echo >>${LOGFILE}
#----------------------------------------------------------------#
# Merge/Move bpstart_notify.<x> to main bpstart_notify_log file. #
#----------------------------------------------------------------#
if [ ! "${LOGDIR}/${LOGNAME}" ]
then
touch ${LOGDIR}/${LOGNAME} 2>/dev/null
fi
cat ${LOGFILE} >>${LOGDIR}/${LOGNAME} 2>/dev/null
$RM ${LOGFILE} 2>/dev/null ##delete bpstart_notify_log.<num>#
return 0
}
### Function: check_svm_metadevices_config ###
# Check if Plexes are being attached.
#
# Arguments:
# none
# Return Values:
# none
###
check_svm_metadevices_config()
{
L_CNT_SUBMIRR=0
_sleep_cntr_=0
if [ -s "${METASTAT}" ]
then
${METASTAT} | grep "there are no existing databases" >/dev/null
if [ $? -ne 0 ]
then
L_SVM_MIRRORS=` ${METASTAT} | grep Mirror | awk -F":" '{print $1}' `
for L_MIRR in ${L_SVM_MIRRORS}
do
###how many submirrors attached to metadevice###
printf "\nMirror Device [${L_MIRR}] has " >>${LOGFILE}
L_CNT_SUBMIRR=` ${METASTAT} ${L_MIRR} | grep "Submirror of" | wc -l | bc `
printf "${L_CNT_SUBMIRR} SubMirrors\n" >>${LOGFILE} 2>&1
done
###Are metadevices attaching?###
if [ ${STREAM_NUMBER} -gt 60 ]
then
_sleep_cntr_=`$EXPR ${STREAM_NUMBER} - 60`
else
_sleep_cntr_=${STREAM_NUMBER}
fi
while :
do
###Are mirrors okay?###
${METASTAT} | grep "Resync in progress" >/dev/null
if [ $? -eq 0 ]
then
echo "A Mirror appears to be resyncing: Sleep ${_sleep_cntr_}secs" >>${LOGFILE} 2>&1
$SLEEP ${_sleep_cntr_}
else
break
fi
done
fi
fi
return 0
}
### Function: save_svm_info ###
# Do some checks on svm state (metastat)
#
# Arguments:
# none
# Return Values:
# none
###
save_svm_info()
{
if [ -f "${METASTAT}" ]
then
###Save metastat status###
printf "\n\n********************" >>${LOGFILE} 2>&1
printf "\nSVM METASTAT STATUS" >>${LOGFILE} 2>&1
printf "\n********************\n" >>${LOGFILE} 2>&1
if [ -x "${METASTAT}" ]
then
${METASTAT} >>${LOGFILE} 2>&1
else
err_msg_="The command [${METASTAT}] is not executable"
abort_script "$_err_msg_" 237
fi
printf "\n==============================================================\n" >>${LOGFILE} 2>&1
#------------------------------------------
# Check that metadevices are not syncing
#------------------------------------------
check_svm_metadevices_config
fi
return 0
}
#********************************************************************
# OSS Functions
#********************************************************************
### Function: ha_first_node_check ###
# If a Netbackup policy has multiple backup clients (virutal ipaddrs)
# belonging to a High Availability system then at some point these
# virtual ipaddrs could exist on same physical server? FailOver condition?
#
# In this situation multiple backup clients are running on same server.
# Set a flag to state "who is first node" (usally myself, but ...)
#
# Arguments:
# none
# Return Values:
# none
###
ha_first_node_check()
{
### VERITAS VCS ###
${PKGINFO} VRTSvcs >/dev/null 2>&1
if [ $? -ne 0 ]
then
return 0
fi
if [ ${STREAM_COUNT} -eq 0 ]
then
return 0
fi
#************************************************#
# Try to be first Node (i.e. Failedover Cluster) #
#************************************************#
$MKDIR -p ${TEMP_SCHED_DIR}/run 2>/dev/null
if [ ! -f ${TEMP_NODE_DIR}/first_node_${STREAM_COUNT} ]
then
#---------------------------------#
# ok, lets try to be first stream #
#---------------------------------#
$ECHO $BKUP_CLIENT >${TEMP_NODE_DIR}/first_node_${STREAM_COUNT} 2>/dev/null
$TOUCH ${TEMP_NODE_DIR}/wait_for_node1_stream1 2>/dev/null
MOUNTPOINTS="` ${OMBSC_HOME}/bin/get_sync_filesystem `"
for MPOINT in ${MOUNTPOINTS}
do
${MKDIR} -p ${MPOINT} >/dev/null 2>&1
done
fi
#---------------------------------------------#
# Confirm who is first (was someone quicker?) #
#---------------------------------------------#
FIRST_NODE=` $CAT ${TEMP_NODE_DIR}/first_node_${STREAM_COUNT} `
$ECHO "${BACKUPID}" >> ${TEMP_SCHED_DIR}/run/${STREAM_NUMBER}.startfile
_num_procs_started_=` $LS ${TEMP_SCHED_DIR}/run/*.startfile | $WC -l | $BC 2>/dev/null `
#---------------------------------------------------------------#
# Due to default OMBS setting (max jobs per client=1) Netbackup #
# allows each node equal priority for FIRST STREAM only before #
# giving NODE1 full priority (other nodes/streams suspended). #
#---------------------------------------------------------------#
COUNTER=50
if [ "$FIRST_NODE" = "$BKUP_CLIENT" ]
then
if [ "${_num_procs_started_}" -eq 1 ]
then
sleep 5
WAIT_FILES="${TEMP_NODE_DIR}/wait_for_node2_stream1"
LET_BACKUP_PROCEED=yes
else
WAIT_FILES="${TEMP_NODE_DIR}/wait_for_node2_stream1 ${TEMP_NODE_DIR}/wait_for_node1_stream1"
fi
for A_FILE in ${WAIT_FILES}
do
#----------------------------------------------------------------------------#
# FIRST/SECOND STREAM: Waiting for Node2 (1st stream) and Node1 (1st stream) #
#----------------------------------------------------------------------------#
if [ -f "${A_FILE}" ] && [ -f "${LOGFILE}" ]
then
${ECHO} "${BKUP_CLIENT}: Waiting to start Node1 (backup preparation) ...." >>${LOGFILE}
fi
while [ -f "${A_FILE}" ]
do
### when this file is gone, we can proceed. ###
sleep 5
COUNTER=`$EXPR ${COUNTER} + 5`
if [ $COUNTER -gt $BPSTART_TIMEOUT ]
then
if [ -f "${LOGFILE}" ]
then
${ECHO} "${BKUP_CLIENT}: Timeout waiting for other Node" >>${LOGFILE}
fi
return 1
fi
done
done
if [ "${LET_BACKUP_PROCEED}" = yes ]
then
${RM} ${TEMP_NODE_DIR}/wait_for_node1_stream1 >/dev/null 2>&1
fi
else
if [ "${_num_procs_started_}" -eq 1 ]
then
$TOUCH ${TEMP_NODE_DIR}/wait_for_node2_stream1 >/dev/null 2>&1
else
#--------------------------------------------------------------------------#
# NOT FIRST NODE/STREAM: We must wait until Node1 has done backup cleanup. #
#--------------------------------------------------------------------------#
if [ -f "${LOGFILE}" ] && [ -d "${TEMP_NODE_DIR}/${FIRST_NODE}" ]
then
$ECHO "${BKUP_CLIENT}: Waiting for Node1 to perform backup cleanup ...." >>${LOGFILE}
fi
while [ -d "${TEMP_NODE_DIR}/${FIRST_NODE}" ]
do
### when this directory is gone, we can proceed. ###
sleep 5
COUNTER=`$EXPR ${COUNTER} + 5`
if [ $COUNTER -gt $BPSTART_TIMEOUT ]
then
if [ -f "${LOGFILE}" ]
then
${ECHO} "${BKUP_CLIENT}: Timeout waiting for Node1 to cleanup" >>${LOGFILE}
fi
break
fi
done
fi
return 1
fi
$ECHO "First Node [${FIRST_NODE}] deemed to be myself: [${BKUP_CLIENT}]" >>${LOGFILE}
return 0
}
ha_first_node_check_new()
{
### VERITAS VCS ###
${PKGINFO} VRTSvcs >/dev/null 2>&1
if [ $? -ne 0 ]
then
return 0
fi
if [ ${STREAM_COUNT} -eq 0 ]
then
return 0
fi
#************************************************#
# Try to be first Node (i.e. Failedover Cluster) #
#************************************************#
$MKDIR -p ${TEMP_SCHED_DIR}/run 2>/dev/null
if [ ! -f ${TEMP_NODE_DIR}/first_node_${STREAM_COUNT} ]
then
#---------------------------------#
# ok, lets try to be first stream #
#---------------------------------#
$ECHO $BKUP_CLIENT >${TEMP_NODE_DIR}/first_node_${STREAM_COUNT} 2>/dev/null
$TOUCH ${TEMP_NODE_DIR}/wait_for_node1_stream1 2>/dev/null
MOUNTPOINTS="` ${OMBSC_HOME}/bin/get_sync_filesystem `"
for MPOINT in ${MOUNTPOINTS}
do
${MKDIR} -p ${MPOINT} >/dev/null 2>&1
done
else
FIRST_NODE=` $CAT ${TEMP_NODE_DIR}/first_node_${STREAM_COUNT} `
if [ ${FIRST_NODE} != ${BKUP_CLIENT} ]
then
if [ ! -f ${TEMP_NODE_DIR}/secound_node ]
then
$ECHO $BKUP_CLIENT >${TEMP_NODE_DIR}/secound_node 2>/dev/null
fi
fi
fi
#---------------------------------------------#
# Confirm who is first (was someone quicker?) #
#---------------------------------------------#
FIRST_NODE=` $CAT ${TEMP_NODE_DIR}/first_node_${STREAM_COUNT} `
$ECHO "${BACKUPID}" >> ${TEMP_SCHED_DIR}/run/${STREAM_NUMBER}.startfile
_num_procs_started_=` $LS ${TEMP_SCHED_DIR}/run/*.startfile | $WC -l | $BC 2>/dev/null `
#---------------------------------------------------------------#
# Due to default OMBS setting (max jobs per client=1) Netbackup #
# allows each node equal priority for FIRST STREAM only before #
# giving NODE1 full priority (other nodes/streams suspended). #
#---------------------------------------------------------------#
COUNTER=50
if [ "$FIRST_NODE" = "$BKUP_CLIENT" ]
then
# $ECHO "${BACKUPID}" >> ${TEMP_SCHED_DIR}/run/${STREAM_NUMBER}.startfile
# _num_procs_started_=` $LS ${TEMP_SCHED_DIR}/run/*.startfile | $WC -l | $BC 2>/dev/null `
if [ "${_num_procs_started_}" -eq 1 ]
then
sleep 5
WAIT_FILES="${TEMP_NODE_DIR}/wait_for_node2_stream1"
#LET_BACKUP_PROCEED=yes
else
WAIT_FILES="${TEMP_NODE_DIR}/wait_for_node2_stream1 ${TEMP_NODE_DIR}/wait_for_node1_stream1"
fi
for A_FILE in ${WAIT_FILES}
do
#----------------------------------------------------------------------------#
# FIRST/SECOND STREAM: Waiting for Node2 (1st stream) and Node1 (1st stream) #
#----------------------------------------------------------------------------#
if [ -f "${A_FILE}" ] && [ -f "${LOGFILE}" ]
then
${ECHO} "${BKUP_CLIENT}: Waiting to start Node1 (backup preparation) ...." >>${LOGFILE}
fi
while [ -f "${A_FILE}" ]
do
### when this file is gone, we can proceed. ###
sleep 5
COUNTER=`$EXPR ${COUNTER} + 5`
if [ $COUNTER -gt $BPSTART_TIMEOUT ]
then
if [ -f "${LOGFILE}" ]
then
${ECHO} "${BKUP_CLIENT}: Timeout waiting for other Node" >>${LOGFILE}
fi
return 1
fi
done
done
if [ -f ${TEMP_NODE_DIR}/backup_prepared ]
then
LET_BACKUP_PROCEED=yes
fi
if [ "${LET_BACKUP_PROCEED}" = yes ]
then
${RM} ${TEMP_NODE_DIR}/wait_for_node1_stream1 >/dev/null 2>&1
fi
else
#--------------------------------------------------------------------------#
# NOT FIRST NODE/STREAM: We must wait until Node1 has done backup cleanup. #
#--------------------------------------------------------------------------#
if [ -f "${LOGFILE}" ] && [ -d "${TEMP_NODE_DIR}/${FIRST_NODE}" ]
then
$ECHO "${BKUP_CLIENT}: Waiting for Node1 to perform backup cleanup ...." >>${LOGFILE}
fi
while [ -d "${TEMP_NODE_DIR}/${FIRST_NODE}" ]
do
if [ -f ${TEMP_NODE_DIR}/backup_prepared ]
then
${RM} ${TEMP_NODE_DIR}/wait_for_node1_stream1
break
fi
### when this directory is gone, we can proceed. ###
sleep 5
COUNTER=`$EXPR ${COUNTER} + 5`
if [ $COUNTER -gt $BPSTART_TIMEOUT ]
then
if [ -f "${LOGFILE}" ]
then
${ECHO} "${BKUP_CLIENT}: Timeout waiting for Node1 to cleanup" >>${LOGFILE}
fi
break
fi
done
return 1
fi
$ECHO "First Node [${FIRST_NODE}] deemed to be myself: [${BKUP_CLIENT}]" >>${LOGFILE}
return 0
}
### Function: failed_over_ha_check ###
# Run the hagrp command to see if both sides working correctly
#
# Arguments:
# none
# Return Values:
# none
###
failed_over_ha_check()
{
### VERITAS VCS ###
${PKGINFO} VRTSvcs >/dev/null 2>&1
if [ $? -ne 0 ]
then
return 0
fi
echo >>${LOGFILE} 2>&1
L_SYB_SERVER="` ${HAGRP} -state 2>/dev/null | $GREP 'Sybase1 ' | $GREP ONLINE | $AWK '{print $3}'"
L_OSS_SERVER="` ${HAGRP} -state 2>/dev/null | $GREP 'Oss ' | $GREP ONLINE | $AWK '{print $3}'"
if [ "$L_SYB_SERVER" = "$L_OSS_SERVER" ]
then
echo "-> SYBASE and OSS are on same server - single-node backup required ..." >>${LOGFILE} 2>&1
echo >>${LOGFILE} 2>&1
return 0
else
echo "-> SYBASE and OSS on different servers (HA-CS is online) - multi-node backup required ..." >>${LOGFILE} 2>&1
echo >>${LOGFILE} 2>&1
return 1
fi
return 0
}
### Function: ensure_vxvm_plexes_are_synced ###
# Check if Plexes are being attached.
#
# Arguments:
# none
# Return Values:
# none
###
ensure_vxvm_plexes_are_synced()
{
_sleep_cntr_=` $EXPR ${STREAM_NUMBER} + 15 `
A_CNT=1
while :
do
###Are mirrors okay?###
$VXTASK list | grep PLXATT | $GREP -v grep >/dev/null 2>&1
if [ $? -eq 0 ]
then
if [ ${A_CNT} -eq 1 ]
then
########Dump output from vxtask list to logfile#######
echo
echo
echo "***********************************************************" >>${LOGFILE}
$VXTASK list >>${LOGFILE}
echo "***********************************************************" >>${LOGFILE}
echo
echo
A_CNT=` $EXPR $A_CNT + 1 `
fi
echo "Mirrors appear to be syncing: Sleep ${_sleep_cntr_}Secs." >>${LOGFILE}
$SLEEP ${_sleep_cntr_}
else
break
fi
done
return 0
}
### Function: are_vxvm_mirrors_split_yet ###
# Check if the VERITAS Volumes have split yet.
#
# Arguments:
# none
# Return Values:
# none
###
are_vxvm_mirrors_split_yet()
{
_sleep_cntr_=` $EXPR ${STREAM_NUMBER} + 15 `
###Split mirrors using ERICombsc###
while :
do
###Are we splitting mirrors still?###
${PS} -ef | $GREP "${OMBSC_TOOL} de" | $GREP -v grep >/dev/null 2>&1
if [ $? -eq 1 ]
then
$SLEEP ${_sleep_cntr_}
break
fi
# slight randomizing sleep to try to prevent any race conditions on exit.
$SLEEP ${_sleep_cntr_}
done
return 0
}
### Function: save_vxvm_info ###
# Do some checks on vxvm licenses, volumes, etc.
#
# Arguments:
# none
# Return Values:
# none
###
save_vxvm_info()
{
${PKGINFO} VRTSvxvm >/dev/null 2>&1
if [ $? != 0 ]
then
return 0
fi
for L_LIC_CMD in ${VXLICREP} ${VXLICENSE} error
do
case ${L_LIC_CMD} in
error) _err_msg_="Could not find [${VXLICREP}] or [$VXLICENSE] commands"
abort_script "$_err_msg_" 232
;;
*) [ ! -x "${L_LIC_CMD}" ] && continue
printf "\n*************************" >>${LOGFILE} 2>&1
printf "\n VERITAS LICENSES LISTING" >>${LOGFILE} 2>&1
printf "\n*************************" >>${LOGFILE} 2>&1
${L_LIC_CMD} >>${LOGFILE} 2>&1
printf "\n*******************\n\n" >>${LOGFILE} 2>&1
break
;;
esac
done
###Check for VERITAS FastSNAP###
echo >>${LOGFILE} 2>&1
echo "-> Check for VxVM FastSNAP [FASTRESYNC] feature .." >>${LOGFILE} 2>&1
if [ -x $VXLICTEST ]
then
diskgrps=` $VXDISK list | $AWK '{ print $4 }' | $EGREP -v '^\-$'| $GREP -v GROUP | $SORT -u `
echo "-> Found Diskgroups [$diskgrps]" >>${LOGFILE} 2>&1
for dg in $diskgrps
do
vols=` $VXPRINT -g ${dg} -v | $AWK '{print $2}' | $GREP -v NAME | $SORT -u `
echo "--> Found volumes [$dg]->[$vols]" >>${LOGFILE} 2>&1
echo
done
###Turn FMR/Fastsync on/off###
L_RC=1
for L_FEATURE in FMR_DGSJ FASTRESYNC
do
$VXLICTEST -n "VERITAS Volume Manager" -f ${L_FEATURE} -sup >/dev/null 2>&1
if [ $? -eq 0 ]
then
$VXLICTEST -n "VERITAS Volume Manager" -f ${L_FEATURE} -sup >>${LOGFILE} 2>&1
echo "Licensed feature [${L_FEATURE}] is enabled" >>${LOGFILE} 2>&1
L_RC=0
break
else
echo "Licensed feature [${L_FEATURE}] is not enabled" >>${LOGFILE} 2>&1
fi
done
if [ $L_RC -eq 0 ]
then
###ON###
for dg in $diskgrps
do
for vol in ` $VXPRINT -g ${dg} -v | $AWK '{print $2}' | $GREP -v NAME | $SORT -u `
do
echo "---> Process volume [$dg]->[$vol] .." >>${LOGFILE} 2>&1
ACMD="$VXPRINT -g ${dg} -F%fastresync $vol"
###ACMD="$VXPRINT -g ${dg} -l ${vol} | $GREP fastresync"###not working?###
if [ "` $ACMD `" = off ]
then
$VXVOL -g ${dg} set fastresync=on ${vol} >>${LOGFILE} 2>&1
case $? in
0) echo "<--- [success] fastresync enabled for [$vol]" >>${LOGFILE} 2>&1
;;
*) echo "<--- [error] fastresync not enabled on [$vol]" >>${LOGFILE} 2>&1
;;
esac
else
echo "<--- fastresync already enabled on [$vol]" >>${LOGFILE} 2>&1
fi
done
done
else
###OFF###
for dg in $diskgrps
do
for vol in ` $VXPRINT -g ${dg} -v | $AWK '{print $2}' | $GREP -v NAME | $SORT -u `
do
echo "---> Process volume [$dg]->[$vol] .." >>${LOGFILE} 2>&1
ACMD="$VXPRINT -g ${dg} -F%fastresync $vol"
###ACMD="$VXPRINT -g ${dg} -l ${vol} | $GREP fastresync"###not working?###
if [ "` $ACMD `" = on ]
then
$VXVOL -g ${dg} set fastresync=off ${vol} >>${LOGFILE} 2>&1
case $? in
0) echo "<--- [success] fastresync disabled for [$vol]" >>${LOGFILE} 2>&1
;;
*) echo "<--- [error] fastresync not disabled on [$vol]" >>${LOGFILE} 2>&1
;;
esac
else
echo "<--- fastresync already disabled on [$vol]" >>${LOGFILE} 2>&1
fi
done
done
fi
else
echo "Command [$VXLICTEST] not found" >>${LOGFILE} 2>&1
fi
echo "<- Done" >>${LOGFILE} 2>&1
echo >>${LOGFILE} 2>&1
#------------------------------------------------------------------------------
# List volumes that exist before executing bpstart_notify for this client
#------------------------------------------------------------------------------
${VXPRINT} -htr | grep "^v " | awk '{print $2}' >>${LOGFILE} 2>&1
printf "\n*******************\n\n" >>${LOGFILE} 2>&1
#------------------------------------------
# Check that mirrors are not syncing
#------------------------------------------
ensure_vxvm_plexes_are_synced
return 0
}
### Function: oss_ss_detach_mount_offline_mirror ####
# Preapare server for backup
#
# Arguments:
# none
# Return Values:
# none
###
oss_ss_detach_mount_offline_mirror()
{
#--------------------------------------------------------------------
# OSS: Multiple stream backup after Split-Mirror Filesystems mounted
#--------------------------------------------------------------------
${OMBSC_TOOL} de >>${LOGFILE} 2>&1
if [ $? -ne 0 ]
then
_err_msg_="Command [${OMBSC_TOOL} de] failed!"
$TOUCH $ABORT_FILE 2>/dev/null
abort_script "$_err_msg_" 229
fi
if [ -d "/Netbackup/Netbackup" ]
then
$RM -fr /Netbackup/Netbackup 2>/dev/null
fi
return 0
}
### Function: start_nbuclient_process ###
# Prepare server for backup
#
# Arguments:
# none
# Return Values:
# none
###
start_nbuclient_process()
{
#-----------------------------------------------------------------------#
# nbuClient binary tracing: If more tracing is needed, then change #
# INFO from false to true in the SCLITRACE Variable below. The extra #
# log output created may need knowledge of C-Language/TCP Sockets to be #
# of great use to the person analysing the inter-socket communitation. #
#-----------------------------------------------------------------------#
SCLITRACE="ERROR=true:INFO=true:INFO_DETAILS=false:SYSTEM_OUT=true:ENTER=false:RETURN=false"
export SCLITRACE
#------------------------------------------
# Execute nbuClient for this Policy stream.
#------------------------------------------
if [ -d "${OMBSC_HOME}/lib/${OMBSC_PLAT}" ]
then
#--- old OMBS3/OMBS4 client ---#
env LD_LIBRARY_PATH=${OMBSC_HOME}/lib/${OMBSC_PLAT} /bin/ldd ${OMBSC_HOME}/bin/${OMBSC_PLAT}/nbuClient >>${LOGFILE} 2>&1
echo >>${LOGFILE} 2>&1
env LD_LIBRARY_PATH=${OMBSC_HOME}/lib/${OMBSC_PLAT} ${OMBSC_HOME}/bin/${OMBSC_PLAT}/nbuClient >>${LOGFILE} 2>&1
else
/bin/ldd ${OMBSC_HOME}/bin/${OMBSC_PLAT}/nbuClient >>${LOGFILE} 2>&1
echo >>${LOGFILE} 2>&1
${OMBSC_HOME}/bin/${OMBSC_PLAT}/nbuClient >>${LOGFILE} 2>&1
fi
RC=$?
if [ $RC -ne 0 ]
then
echo "(bpstart_notify) nbuClient Daemon failed!" >>${LOGFILE} 2>&1
echo >>${LOGFILE} 2>&1
echo "(tip 1) Ensure HA Cluster(s) are in initial state [hastatus -sum]." >>${LOGFILE} 2>&1
echo "(tip 2) The hostname of backup-server and policy-clientname must be same vlan." >>${LOGFILE} 2>&1
echo "\tSo when policy is created and Netbackup client software is pushed to the" >>${LOGFILE} 2>&1
echo "\tclient, the values [bp.conf:SERVER = <xxxx>, CLIENT = <xxxx>] are sane!" >>${LOGFILE} 2>&1
echo "\t(Particularly critical for HA-CS Backup Policies)." >>${LOGFILE} 2>&1
echo "(tip 3) For manual backups, ensure JAVA Console is connected to bkup-vlan-hostname." >>${LOGFILE} 2>&1
echo "(tip 4) Ensure tape-drives are in [UP] status; check syslog messages." >>${LOGFILE} 2>&1
echo "(tip 5) Try to get [competing policies] to finish-earlier or start-bit-later." >>${LOGFILE} 2>&1
echo "(tip 6) Increase Multiplexing value on Storage-Unit if required." >>${LOGFILE} 2>&1
echo "(tip 7) Ensure [nbuserver] service is running on Backup-Server." >>${LOGFILE} 2>&1
echo "(tip 8) Verify [/etc/hosts] on backup-server/client for valid entries." >>${LOGFILE} 2>&1
echo >>${LOGFILE} 2>&1
if [ "${I386}" ]
then
${GREP} "Error returned from server. Execute house_keeping_rollback.sh script" ${LOGFILE} >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo >>${LOGFILE}
echo "******************************************" >>${LOGFILE}
echo " OMBS on Solaris X86: TRYING TO RECOVER " >>${LOGFILE}
echo "******************************************" >>${LOGFILE}
echo >>${LOGFILE}
oss_ss_detach_mount_offline_mirror
if [ $? -eq 0 ]
then
return 0
fi
fi
fi
_err_msg_="(bpstart_notify) nbuClient Daemon failed! Please read above troubleshooting tips. rc=${RC}"
$TOUCH $ABORT_FILE 2>/dev/null
abort_script "$_err_msg_" 360
fi
return 0
}
#********************************************************************
# NIQ ENIQ_EVENTS Functions
#********************************************************************
### Function: events_prepare_backup ####
# Prepare server for backup
#
# Arguments:
# none
# Return Values:
# none
###
events_prepare_backup()
{
$ECHO "Preparing Events Server for Backup" >> ${LOGFILE}
/usr/bin/bash ${PREP_ENIQ_EVENTS_BACKUP} -N >>${LOGFILE} 2>&1
if [ $? -ne 0 ]
then
_err_msg_="Failure preparing ENIQ EVENTS server ${BKUP_CLIENT} for backup"
$TOUCH $ABORT_FILE 2>/dev/null
abort_script "$_err_msg_" 222
fi
return 0
}
#********************************************************************
# NIQ Statistics Functions
#********************************************************************
### Function: statistics_prepare_backup ####
# Prepare server for backup
#
# Arguments:
# none
# Return Values:
# none
###
statistics_prepare_backup()
{
/usr/bin/bash ${PREP_ENIQ_STATS_BACKUP} -N -q >>${LOGFILE} 2>&1
if [ $? -ne 0 ]
then
_err_msg_="Failure preparing Statistics server ${BKUP_CLIENT} for backup"
$TOUCH $ABORT_FILE 2>/dev/null
abort_script "$_err_msg_" 208
fi
return 0
}
statistics_prepare_backup_raw()
{
/usr/bin/bash ${PREP_ENIQ_STATS_BACKUP} -a activate >>${LOGFILE} 2>&1
if [ $? -ne 0 ]
then
_err_msg_="Failure preparing Statistics server ${BKUP_CLIENT} for backup"
$TOUCH $ABORT_FILE 2>/dev/null
abort_script "$_err_msg_" 208
fi
return 0
}
#********************************************************************
# SNMS Functions
#********************************************************************
### Function: snms_prepare_for_backup ####
# Preapare server for backup
# Arguments:
# none
# Return Values:
# none
###
snms_prepare_for_backup()
{
#------------------------------------------------------------
# SNMS: Multiple stream backup after Filesystems fssnap'ed.
#------------------------------------------------------------
${SNMS_BACKUP} -o >>${LOGFILE} 2>/dev/null
RC=$?
###Handle RC###
# If this file exists, set rc=0 #
if [ -f /snms_backup/.ignore_nonzero_rc ]
then
RC=0
fi
# If nothing mounted, set rc>0 #
if [ ! -d /snms_backup/mnt/var ]
then
RC=555
fi
##############
###Check RC###
##############
if [ $? -ne 0 ]
then
_err_msg_="Command [${SNMS_BACKUP} -o] failed!"
$TOUCH $ABORT_FILE 2>/dev/null
${SNMS_BACKUP} -d >>${LOGFILE} 2>&1
abort_script "$_err_msg_" 215
exit 24
fi
return 0
}
##########
###MAIN###
##########
trap "abort_script" 1 2 3 4 5 6 7 8 10 12 13 14 15
# Check that the effective id of the user is root
check_id root
DEBUG_MODE=0
DEBUG_FLAG_FILE=/tmp/bpstart_debug_mode
if [ -f "${DEBUG_FLAG_FILE}" ]
then
DEBUG_MODE=1
fi
#**************************
# Pre execution operations
#**************************
TEMP_NODE_DIR=/tmp/.bp_sched_dir
TEMP_SCHED_DIR=${TEMP_NODE_DIR}/${BKUP_CLIENT}
#----------------------------------------#
# VCS - Watch out for failedOver cluster #
#----------------------------------------#
${ECHO} "${POLICY_ID}" | ${EGREP} "OSS_i386|OSS_HACS|VXVM_" >/dev/null 2>&1
if [ ${?} -eq 0 ]
then
failed_over_ha_check
case ${?} in
0)
ha_first_node_check_new || exit 0
;;
1)
ha_first_node_check || exit 0
;;
esac
fi
ABORT_FILE=${TEMP_SCHED_DIR}/aborted
if [ ${DEBUG_MODE} -eq 1 ]
then
$GREP -w 999 ${DEBUG_FLAG_FILE}
if [ $? -eq 0 ]
then
$MKDIR -p ${TEMP_SCHED_DIR}/bpstart_trace_${POLICY_ID}/
exec 1>>${TEMP_SCHED_DIR}/bpstart_trace_${POLICY_ID}/bpstart_stream_${STREAM_NUMBER}
exec 2>>${TEMP_SCHED_DIR}/bpstart_trace_${POLICY_ID}/bpstart_stream_${STREAM_NUMBER}
fi
fi
#---------------------------------------
#--> Which type of ERICSSON Policy? <---
#---------------------------------------
OMBS_POLICY_ID=""
#---------------#
# root policies #
#---------------#
echo "${POLICY_ID}" | $GREP _ROOT >/dev/null 2>&1
if [ $? -eq 0 ]
then
TAG=_ROOT
else
for TAG in _FILES _SNMS _VERSANT _Sybase OSS_i386_ OSS_HACS_ OSS_DDS_ OSS_HARS_ OSS_ VXVM_ ENIQ_STATS_MULTIBLADE_CORDINATOR_RAW_ ENIQ_STATS_MULTIBLADE_CORDINATOR_DATA_ ENIQ_STATS_MULTIBLADE_DATA_ ENIQ_STATS_ONBLADE_DATA_ ENIQ_STATS_ONBLADE_RAW_ ENIQ_STATS_ ENIQ_EVENTS_ ENIQ_
do
#-------------------------------------#
# Data Policies or older policy names #
#-------------------------------------#
echo "${POLICY_ID}" | grep ${TAG} >/dev/null 2>&1
if [ $? -eq 0 ]
then
case ${TAG} in
OSS_HACS_) TAG=_HACS
;;
OSS_HARS_) TAG=_HARS
;;
OSS_DDS_) TAG=_DDS
;;
VXVM_) TAG=_VX
;;
OSS_i386_) TAG=_OSS_i386
;;
OSS_) TAG=_OSS
;;
ENIQ_STATS_MULTIBLADE_DATA_) TAG=_ENIQ_STATS_MULTIBLADE_DATA
;;
ENIQ_STATS_MULTIBLADE_CORDINATOR_DATA_) TAG=_ENIQ_STATS_ONBLADE_DATA
;;
ENIQ_STATS_ONBLADE_DATA_) TAG=_ENIQ_STATS_ONBLADE_DATA
;;
ENIQ_STATS_ONBLADE_RAW_) TAG=_ENIQ_STATS_ONBLADE_RAW
;;
ENIQ_EVENTS_) TAG=_ENIQ_EVENTS
;;
ENIQ_|ENIQ_STATS_) TAG=_ENIQ_STATS
;;
_VERSANT|_Sybase) break
;;
*) TAG=_FILES
;;
esac
break
fi
done
fi
if [ -z "${TAG}" ]
then
TAG=_FILES
fi
OMBS_POLICY_ID="${TAG}"
#------------------
#------------------
# OMBS Logging ###
#------------------
#------------------
OMBS_LOGS_HOME=${TPP_HOME}/logs/ombs
if [ ! -d "${OMBS_LOGS_HOME}" ]
then
$MKDIR -p ${OMBS_LOGS_HOME} 2>/dev/null
fi
###SAVE BMR AGENT INFO###
SAVE_CONFIG=${OMBS_COMMON}/bin/save_conf_data.bsh
if [ -s /eniq/bkup_sw/bin/save_conf_data.bsh ]
then
SAVE_CONFIG=/eniq/bkup_sw/bin/save_conf_data.bsh
fi
#########################
# Set General variables #
#########################
case ${OMBS_POLICY_ID} in
_HARS|_HACS|_DDS|_OSS*|_VX) pkginfo ERICombsc >/dev/null 2>&1
RC=${?}
if [ $RC -ne 0 ]
then
pkginfo ERICnbcli >/dev/null 2>&1
RC=${?}
fi
if [ $RC -ne 0 ]
then
_err_msg_="The package [ERICombsc] is not installed!"
abort_script "$_err_msg_" 620
fi
LOGDIR=${OMBS_LOGS_HOME}/data
###remove any old stuff###
for TIDYUP in ${OMBSC_HOME}/backup/ ${OMBS_LOGS_HOME}
do
rm -fr ${TIDYUP}/run_logs >/dev/null 2>&1
rm -fr ${TIDYUP}/oss >/dev/null 2>&1
done
###Scripts for OSS_<hostname> and OSS_HARS_<hostname> Policies###
OMBSC_TOOL=${OMBSC_HOME}/bin/ombsc
;;
_VERSANT) LOGDIR="${OMBS_LOGS_HOME}/versant"
;;
_Sybase) LOGDIR="${OMBS_LOGS_HOME}/sybase"
${MV} ${OMBSC_HOME}/logs/sybase/* ${LOGDIR} >/dev/null 2>&1
${RM} -fr ${OMBSC_HOME}/logs/sybase/ >/dev/null 2>&1
;;
_SNMS) LOGDIR="${OMBS_LOGS_HOME}/snms"
SNMS_BACKUP=/snms_backup/backup.sh
;;
_ENIQ_EVENTS) LOGDIR=${OMBS_LOGS_HOME}/data
PREP_ENIQ_EVENTS_BACKUP=/eniq/bkup_sw/bin/prepare_events_bkup.bsh
CLEANUP_ENIQ_EVENTS_BACKUP=/eniq/bkup_sw/bin/cleanup_events_backup.bsh
SAVE_CONFIG=/eniq/bkup_sw/bin/save_conf_data.bsh
if [ ! -s ${SAVE_CONFIG} ]
then
ALT_SAVE_CONFIG=${OMBS_COMMON}/bin/save_conf_data.bsh
fi
;;
_ENIQ_STATS_MULTIBLADE_DATA) LOGDIR=${OMBS_LOGS_HOME}/data
PREP_ENIQ_STATS_BACKUP=/eniq/bkup_sw/bin/prepare_eniq_bkup.bsh
CLEANUP_ENIQ_STATS_BACKUP=/eniq/bkup_sw/bin/cleanup_eniq_backup.bsh
if [ ! -s ${SAVE_CONFIG} ]
then
ALT_SAVE_CONFIG=/eniq/admin/backup/bin/save_conf_data.bsh
fi
;;
_ENIQ_STATS_ONBLADE_DATA) LOGDIR=${OMBS_LOGS_HOME}/data
PREP_ENIQ_STATS_BACKUP=/eniq/bkup_sw/bin/prepare_eniq_bkup.bsh
CLEANUP_ENIQ_STATS_BACKUP=/eniq/bkup_sw/bin/cleanup_eniq_backup.bsh
if [ ! -s ${SAVE_CONFIG} ]
then
ALT_SAVE_CONFIG=/eniq/admin/backup/bin/save_conf_data.bsh
fi
;;
_ENIQ_STATS_ONBLADE_RAW) LOGDIR=${OMBS_LOGS_HOME}/data
PREP_ENIQ_STATS_BACKUP="/ericsson/ombss/eniq_stats_blade/bin/activate_snapshots.bsh"
CLEANUP_ENIQ_STATS_BACKUP=/ericsson/ombss/eniq_stats_blade/bin/activate_snapshots.bsh
SAVE_CONFIG=""
ALT_SAVE_CONFIG=""
;;
_ENIQ_STATS) LOGDIR=${OMBS_LOGS_HOME}/data
PREP_ENIQ_STATS_BACKUP=/eniq/admin/backup/bin/prepare_eniq_backup.bsh
CLEANUP_ENIQ_STATS_BACKUP=/eniq/admin/backup/bin/cleanup_eniq_backup.bsh
if [ ! -s ${SAVE_CONFIG} ]
then
ALT_SAVE_CONFIG=/eniq/admin/backup/bin/save_conf_data.bsh
fi
;;
_ROOT) LOGDIR=${OMBS_LOGS_HOME}/root
${ECHO} "${OMBS_POLICY_ID}" | grep ENIQ_EVENTS_ROOT >/dev/null 2>&1
if [ ${?} -eq 0 ]
then
SAVE_CONFIG=/eniq/bkup_sw/bin/save_conf_data.bsh
fi
### Is ERICombsc in use? OSS? ###
if [ -d "${OMBSC_HOME}" ]
then
if [ ! -d "${OMBSC_HOME}/backup" ]
then
DATA_SAVECFG=${OMBSC_HOME}/bin/house_keeping.sh
DATA_GETVXFS=${OMBSC_HOME}/bin/get_sync_filesystem
${DATA_SAVECFG} "` ${DATA_GETVXFS} ` /"
fi
fi
;;
*) LOGDIR=${OMBS_LOGS_HOME}/clilog/
if [ ! -s ${SAVE_CONFIG} ]
then
ALT_SAVE_CONFIG=/ericsson/ombsx86/bin/save_x86_conf_data.bsh
fi
;;
esac
#****************************#
# LOGFILE / LOGDIR Handling. #
#****************************#
if [ -d "${LOGDIR}" ]
then
find ${LOGDIR} \( -name 'bpstart_notify*' \) -atime +3 -exec rm {} \;
else
$MKDIR -p ${LOGDIR} 2>/dev/null
##for events/statistics##
rm /eniq/admin/backup/log >/dev/null 2>&1
ln -s ${LOGDIR} /eniq/admin/backup/log >/dev/null 2>&1
fi
#**************************#
# Get correct logfile name #
#**************************#
LOGNAME=bpstart_notify_log
BPEND_LOGNAME=bpend_notify_log
CHECK_FOR_PREV_LOGS=false
if [ ${STREAM_COUNT} -gt 1 ]
then
LOGFILE="${LOGDIR}/${LOGNAME}.${STREAM_NUMBER}"
if [ ! -f ${TEMP_SCHED_DIR}/first_stream ]
then
CHECK_FOR_PREV_LOGS=true
fi
else
LOGFILE="${LOGDIR}/${LOGNAME}"
fi
#***********************************************************************#
# If previous backup failed, make sure we don't overwrite previous logs #
#***********************************************************************#
if [ "${CHECK_FOR_PREV_LOGS}" = true ]
then
if [ -f "${LOGDIR}/${LOGNAME}" ]
then
###File bpstart_notify_log already exists (prev backup failed?). Archive it!###
$MV ${LOGDIR}/${LOGNAME} ${LOGDIR}/${LOGNAME}.prev_${RUN_TIME}
fi
if [ -f "${LOGDIR}/${BPEND_LOGNAME}" ]
then
###File bpend_notify_log already exists (prev backup failed?). Archive it!###
$MV ${LOGDIR}/${BPEND_LOGNAME} ${LOGDIR}/${BPEND_LOGNAME}.prev_${RUN_TIME}
fi
fi
# Determine absolute path to software
get_absolute_path
# Check args
chk_args $*
touch_bpstart_called
#*************************************************#
# Print banner to top of the log-file except for #
# Sybase (does not use bpstart_notify_logs). #
#*************************************************#
if [ ${OMBS_POLICY_ID} != _Sybase ]
then
chk_create_logfile
printlog_job_header ${*}
fi
#************************#
# Sanity check NBU setup #
#************************#
if [ ! -s "${BPCONF}" ]
then
_err_msg_="File ${BPCONF} not found or empty"
abort_script "$_err_msg_" 210
fi
# Get the client name according to the Netbackup server
if [ ! "${BP_CLIENT_NAME}" ]
then
_err_msg_="Could not read CLIENT_NAME parameter from ${BPCONF}"
abort_script "$_err_msg_" 211
fi
#--------------------------------------------------------------------------
# Execute OMBS code before Netbackup takes over depending on the Policy ###
#--------------------------------------------------------------------------
case ${OMBS_POLICY_ID} in
_VERSANT) #### VERSANT ###
#--------------------------------------#
# Determine a suitable dump directory. #
#--------------------------------------#
case ${OS_VERSION} in
10) OMBS_DUMP_DIR=/ossrc/dbdumps/ombs
;;
*) OMBS_DUMP_DIR=/export/dbdumps/ombs
;;
esac
if [ ! -d "${OMBS_DUMP_DIR}" ]
then
mkdir -p ${OMBS_DUMP_DIR} 2>/dev/null
fi
VDUMP_DIR="${OMBS_DUMP_DIR}/VERSANT"
if [ ! -d "${VDUMP_DIR}" ]
then
mkdir -p ${VDUMP_DIR} >>${LOGFILE} 2>&1
fi
chmod 777 ${VDUMP_DIR} >>${LOGFILE} 2>&1
DUMP=`df -h /ossrc/dbdumps | awk 'NR==2 {print $6}'`
if [ "$VDUMP_DIR" != "/export/dbdumps/ombs/VERSANT" ]
then
if [ "$DUMP" != /ossrc/dbdumps ]
then
rm -rf ${OMBS_DUMP_DIR} >>${LOGFILE} 2>&1
rm -rf ${VDUMP_DIR} >>${LOGFILE} 2>&1
if [ ! -d /export/dbdumps/ombs/VERSANT ]
then
mkdir -p /export/dbdumps/ombs/VERSANT >>${LOGFILE} 2>&1
fi
ln -s /export/dbdumps/ombs /ossrc/dbdumps
chmod 777 /export/dbdumps/ombs/VERSANT >>${LOGFILE} 2>&1
VDUMP_DIR=/export/dbdumps/ombs/VERSANT
fi
fi
chown nmsadm:nms ${VDUMP_DIR} >>${LOGFILE} 2>&1
#-----------------------------------------------------#
### only want databases on this host see TR HF67753 ###
### two cuts are necessary to get rid of the blanks ###
#-----------------------------------------------------#
DBLIST=/opt/versant/ODBMS/bin/dblist
VBACK=/opt/versant/ODBMS/bin/vbackup
DB_NAMES="` ${DBLIST} | grep name | cut -d'=' -f2 | cut -d' ' -f2 `"
######################
#->Try masterservice #
######################
DB_NAMES="` ${DBLIST} | grep name | cut -d'=' -f2 | cut -d' ' -f2 | nawk -v thishost=masterservice '{ dbname=$0;t=split(dbname,list,"@"); if(list[t]==thishost ){ print list[t-1];} }' `"
######################
#->else try hostname #
######################
if [ -z "${DB_NAMES}" ]
then
DB_NAMES="` ${DBLIST} | grep name | cut -d'=' -f2 | cut -d' ' -f2 | nawk -v thishost=$THIS_HOST '{ dbname=$0;t=split (dbname,list,"@"); if(list[t]==thishost ){ print list[t-1];} }' `"
fi
######################
# Dump each Database #
######################
for dbname in ${DB_NAMES}
do
DUMP_VERSANT_DB="${VBACK} -dev $VDUMP_DIR/level0_$dbname -level 0 -backup $dbname"
printf "\n\nBacking up database [$dbname]\n" >>${LOGFILE} 2>&1
printf "\n\n[${DUMP_VERSANT_DB}]\n\n" >>${LOGFILE} 2>&1
su - nmsadm -c "${DUMP_VERSANT_DB}" >>${LOGFILE} 2>&1
if [ $? -ne 0 ]
then
printf "\n${RUN_TIME} Command [${DUMP_VERSANT_DB}] failed!\n" >>${LOGFILE} 2>&1
exit 22
fi
echo "[done]"
done
;;
_Sybase) #-------------------------------------------------------------------------
# Sybase: IF Policy is <hostname>_Sybase_<DB> or <hostname>_Sybase_FILES
#------------------------------------------------------------------------
;;
_ENIQ_STATS_MULTIBLADE_DATA|_ENIQ_STATS_ONBLADE_DATA|_ENIQ_STATS_ONBLADE_RAW|_ENIQ_STATS) ###ENIQ-Statistics DATA###
if [ ! -s "${PREP_ENIQ_STATS_BACKUP}" ]
then
_err_msg_="File ${PREP_ENIQ_STATS_BACKUP} not found or empty"
abort_script "$_err_msg_" 212
fi
streamed_data_policy
;;
_ENIQ_EVENTS) ###ENIQ-Events DATA###
if [ ! -s "${PREP_ENIQ_EVENTS_BACKUP}" ]
then
_err_msg_="File ${PREP_ENIQ_EVENTS_BACKUP} not found or empty"
abort_script "$_err_msg_" 213
fi
streamed_data_policy
;;
_SNMS) ###### SNMS ######
if [ ! -s "${SNMS_BACKUP}" ]
then
_err_msg_="File ${SNMS_BACKUP} not found or empty"
abort_script "$_err_msg_" 214
fi
### OK ###
streamed_data_policy
;;
_OSS*|_HARS|_HACS|_DDS|_VX)
if [ ! -s "${OMBSC_TOOL}" ]
then
_err_msg_="File [${OMBSC_TOOL}] not found or empty"
abort_script "$_err_msg_" 211
fi
### OK ###
streamed_data_policy
;;
_FILES)
streamed_data_policy
;;
*) ###Some other Policy###
solaris_client_checks
;;
esac
exit 0
#
8044731