Hiii,
I have a requiremnt like this---
1) Utility will be run under MT owner.
2) This utility will clean files in ABC/envsw/logs. And following logs will be backed up or deleted.
Dispatcher Logs
Middle tier Logs
Sage log
Sage monitor log
Sage db clean up result log
Core files
3) mt_clean -a<action> [-t <time>]* -L <backup location>
-a<action> - has two values "delete" or "backup”. If not specified by default "delete" action will*occur. If*"backup" option is given, files will be backed up on the location specified by the -L, -L is mandatory if back up option is specified.
-t<time>* - The time is given with the -t option and its default is 1am
A time of 'now' means to execute the cleanup operation now
A time of 'never' means that the cleanup operation should not be scheduled and any existing cleanup should be cancelled.
-L <backup location> -*this field is mandatory if backup action is selected.
Note: As middle tier process are running and not stopped while this utility is running, the utility should create an empty*file with same name which has deleted or backed up. Otherwise middle tier logs will not be generated until the middle tier process is restarted. Any core files will be backed up or deleted according to the action chosen.*
It could be run as---
intasclean -a delete/backup now somelocation
I wrote the script like this....
RELEASE=${PATH##*/OCU_}
RELEASE=${RELEASE%%/bin:*}
DEBUGGING=''
WhenToRun="01:00"
ExpirationTime=7 # Number of days
FilesToBackup='*.track* *.xml *.vm* *.gz Trace* TRACE* *.core *.out fcif_data_* esi_error_* *.rollback *.sed R.* APStatus_*log* *.output* send_mail* downenv* check_env* intaspurge_db_* sqlnet.log *.rpt *.html *.csv *.log*'
FilesToDelete='*.log*'
FileLocation='$INTAS_INSTALL_DIR/envsw/logs'
PID_Templates='Trace\([0-9][0-9][0-9][0-9][0-9]\)_.* TRACE_\([0-9][0-9][0-9][0-9][0-9]\)_.* .*_\([0-9][0-9]*\).out'
Progname=$(basename $0)
Usage="Usage:$Progname"'[-a <delete or backup] [-t <time>] [-l|-L <backup location>]'
IsCronJob=0
if [[ "$1" = "cron" ]]; then
. ~/.kshrc
IsCronJob=1
if [[ -z "$INTAS_INSTALL_DIR" ]]; then
echo "You must be logged in as the application owner to delete the middle tier logs"
return 1
fi
BackupLocation="$INTAS_INSTALL_DIR/mt_backup"
TEMPDIR=/tmp
if [[ -d $INTAS_INSTALL_DIR/envsw/tmp ]]; then
TEMPDIR=$INTAS_INSTALL_DIR/envsw/tmp
fi
mt_clean_errfile="$INTAS_INSTALL_DIR/envsw/logs/mt_clean.$(date +%a)"
cfile=$(/bin/ls -1t $(find $INTAS_INSTALL_DIR -follow -name 'CommonScriptSetup.ksh') | head -1)
if [[ -x $cfile ]]; then
export PATH=$PATH:$(dirname $cfile)
. $cfile
else
echo "Unable to find common include file needed for execution"
if [[ $IsCronJob -eq 1 ]]; then
SendIntasNotifyMail "Middletierclean error message" $mt_clean_errfile
fi
return 1
fi
while getopts a:t:l:L:d optvar
do
case $optvar in
a) echo -n "This section is to delete Middletier Logs or to take backup of that"
echo "D:Delete the Middletier Logs"
echo "B:Take the Backup Of Middletier Logs"
echo "C:Come out of this swtich"
echo "enter your option"
read ans
case $ans in
D) echo -n "Delete The MiddleTier Logs"
for files in $FileLocation
do
touch $files $files.$(date +%a)
# find /intasmut2/envsw/logs -type f -mtime -2 | xargs grep "*.log*"
rm -f /intasmut2/envsw/logs/$FilesToDelete
echo -n "MiddleTier Logs are cleaned up"
done
;;
B) echo -n "Take the backup of the Log files"
if [[ ! -d $BackupLocation ]]; then
echo "Non-Existed Directory Specified"
else
cp /intasmut2/envsw/logs $BackupLocation
fi
;;
C) Echo -n "Come out of Delete or backup Switch Statement"
break;;
case $optvar in
t) WhenToRun="$OPTARG"
if [[ $WhenToRun = "never" ]]; then
WhenToRun='24:00'
fi
if [[ $WhenToRun = "now" ]]; then
IsCronJob=1
WhenToRun='24:00'
fi
if /bin/echo $WhenToRun | egrep '^[0-9]{1,2}:[0-5][0-9]$' >/dev/null; then
: Time is correct format
else
echo "Incorrect time format, time must be in HH:MM format"
return $E_INT_INVALID_ARGS
fi
;;
l) BackupLocation="$OPTARG"
if [[ ! -d $BackupLocation ]]; then
echo "Non-existant directory specified"
if [[ $IsCronJob -eq 1 ]]; then
SendIntasNotifyMail "Middletierclean error message" $mt_clean_errfile
fi
return $E_INT_MISSING_DIR
fi
if [[ $BackupLocation != *backup ]]; then
echo "Appending backup subdirectories"
BackupLocation=$BackupLocation/backup
mkdir -p $BackupLocation >/dev/null 2>&1
if [[ ! -d $BackupLocation ]]; then
echo "Unable to make backup directory: $BackupLocation"
if [[ $IsCronJob -eq 1 ]]; then
SendIntasNotifyMail "Middletierclean error message" $mt_clean_errfile
fi
return $E_INT_MISSING_DIR
fi
fi
l_flag=Y
Llcron=l
;;
L) BackupLocation="$OPTARG"
Parent=$(expr $BackupLocation : '\(.*\)/.*' \| $BackupLocation)
if [[ ! -d $Parent ]]; then
echo "Non-existant directory specified"
if [[ $IsCronJob -eq 1 ]]; then
SendIntasNotifyMail "Middletierclean error message" $mt_clean_errfile
fi
return $E_INT_MISSING_DIR
fi
if [[ $IsCronJob -eq 1 ]]; then
BackupLocation=$BackupLocation$(date +%w)
if [[ ! -d $BackupLocation ]]; then
mkdir -p $BackupLocation >/dev/null 2>&1
if [[ ! -d $BackupLocation ]]; then
echo "Unable to make backup directory: $BackupLocation"
if [[ $IsCronJob -eq 1 ]]; then
SendIntasNotifyMail "Middletier error message" $mt_clean_errfile
fi
return $E_INT_MISSING_DIR
fi
fi
fi
L_flag=Y
Llcron=L
;;
d) DEBUGGING='/bin/echo'
;;
*) echo $Usgae
return 1
;;
esac
done
(( optcount = OPTIND - 1 ))
shift $optcount
if [[ -z "$1" ]]; then
echo $Usage
echo
echo 'This command will schedule an INTAS cleanup at a certain time of the day'
echo 'The time is given with the -t option and its default is 1am'
echo "A time of 'now' means to execute the cleanup operation now"
echo "A time of 'never' means that the cleanup operation should not be scheduled"
echo "and any existing cleanup or the specified environments/centers should be cancelled"
echo 'A backup location can be specified with the -l option. This is the directory'
echo 'where files are moved that are older than 1 day. The default is '"$INTAS_INSTALL_DIR/backup."
echo 'Instead of -l, you can use -L to specify a 7-day backup directory rotation.'
echo
echo 'A file expiration interval is set with the -e option. Files older than this'
echo 'number of days will be removed from the backup areas'
echo
echo "More than one cleanup can be scheduled as long as each cleanup is different"
echo "e.g. "$Progname all" and "$Progname prd all" can both be run at the same or different times"
echo
echo "Typical usage: $Progname -t 2:00 -e 14 prd all"
echo "This will schedule backups at 2am each night, purge files more than 14 days old"
echo "and backup all centers in the prd environment"
echo
echo "Alternatively: $Progname -t now -e 14 prd all"
echo "This will execute intasclean right now for one time"
echo
return $E_INT_INVALID_ARGS
fi
#Unzip the file under backup directory
/usr/contrib/bin/gunzip -r $BackupLocation
if [[ "$L_flag" = "Y" && "$l_flag" = "Y" ]]; then
echo 'You can not specify both -l and -L options.'
if [[ $IsCronJob -eq 1 ]]; then
SendIntasNotifyMail "Middletierclean error message" $mt_clean_errfile
fi
return 1;
fi
if [[ ! -d $BackupLocation && -w $BackupLocation ]]; then
echo 'The backup location does not exist or is not writable'
if [[ $IsCronJob -eq 1 ]]; then
SendIntasNotifyMail "Middletierclean error message" $mt_clean_errfile
fi
return 1
fi
cd /
if whence $Progname >/dev/null; then
: We found this program in the path
else
echo "Unable to locate $Progname in the PATH, check the .kshrc for correctness"
if [[ $IsCronJob -eq 1 ]]; then
SendIntasNotifyMail "Middletierclean error message" $mt_clean_errfile
fi
return $E_INT_NO_FILE
fi
arg1=$1
arg2=$2
cd $INTAS_INSTALL_DIR/envsw
if [[ $? != 0 ]]; then
echo "Unable to cd to $INTAS_INSTALL_DIR/envsw, exiting..."
if [[ $IsCronJob -eq 1 ]]; then
SendIntasNotifyMail "Middletierclean error message" $mt_clean_errfile
fi
return $E_INT_MISSING_DIR
fi
dirlist=""
for dir in $DirCleanupList
do
if [[ -d $dir ]]; then
dirlist="$dirlist $dir"
fi
done
DirCleanupList=$dirlist
if [[ -z "$DirCleanupList" ]]; then
echo "No directories to clean up"
if [[ $IsCronJob -eq 1 ]]; then
SendIntasNotifyMail "Middletierclean error message" $mt_clean_errfile
fi
return 1
fi
echo "Start middletierclean at $(date)"
echo "Cleaning the following dirs:"
echo "$DirCleanupList" | perl -ne 'print join("\n", split(" ")) . "\n"; '
if [[ $IsCronJob -ne 1 ]]; then
# We are not a cron job, install a line into the crontab
if (crontab -l 2>&1 1>/dev/null | grep 'not authorized'); then
echo "Unable to use cron, contact your system administrator"
echo "Check that $(whoami) has an entry in cron.allow"
return 1
fi
cronfile="$TEMPDIR/cur_crontab$$"
crontab -l 2>&1 | grep -v '^crontab' >$cronfile
if grep "$Progname cron .* $arg1 $arg2" $cronfile >/dev/null; then
tmpvar=$(grep -v "$Progname cron.*$arg1 $arg2" $cronfile)
echo "$tmpvar" >$cronfile
fi
if [[ $WhenToRun != 24:00 ]]; then
Llcron=l
minute=$(/bin/echo $WhenToRun | cut -d: -f2)
hour=$(/bin/echo $WhenToRun | cut -d: -f1)
if [[ -z "$DEBUGGING" ]]; then
echo "$minute $hour" '* * *' ". ~/.kshrc; $(whence $Progname) cron -e $FileLocation -$Llcron $BackupLocation $arg1 $arg2" >>$cronfile
else
echo "$minute $hour" '* * *' ". ~/.kshrc; $(whence $Progname) cron -d -e $FileLocation -$Llcron $BackupLocation $arg1 $arg2" >>$cronfile
fi
fi
crontab $cronfile >/dev/null 2>&1
if crontab -l | diff - $cronfile >/dev/null; then
if [[ $WhenToRun != 24:00 ]]; then
echo crontab has been installed correctly
else
echo The crontab entry for \"$arg1 $arg2\" has been removed
fi
else
echo "Error installing crontab file"
fi
/bin/rm -f $cronfile
echo "End middletierclean at $(date)"
return $E_NO_ERROREnd of the shell script
Some of the portion of this script is preexisting.i have to wrote it like this only.I am not aware of getopts in scripts,i tried to google it also but nt able to understand,can you people please help me out in this.
getopts is required in this or anything that will be similar to this.I am getting errors when i ran this.done is not matching with while but later there can be more errors.
I am in a learning phase so need help of the experts in this.
I have HP-UX.