| | |
Script to delete or backup logs at a specific time and under specific user
![]() |
•
•
Join Date: Aug 2007
Posts: 49
Reputation:
Solved Threads: 0
I have to write a shell script like this--
1) Utility will be run under the directory owner.
2) This utility will clean files in ABC/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.*
Note-> mt_clean is the utility name.it can be run like this.
mt_clean -a delete/backup now somelocation.
it will take the backup or delete the log files now only or if backup needed it will do it in backuplocation.
If i can clarify any doubt please let me know.
i will appericiateur help.
I have to use getopts in this,i am a newbie in shell scripting and learning it.
1) Utility will be run under the directory owner.
2) This utility will clean files in ABC/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.*
Note-> mt_clean is the utility name.it can be run like this.
mt_clean -a delete/backup now somelocation.
it will take the backup or delete the log files now only or if backup needed it will do it in backuplocation.
If i can clarify any doubt please let me know.
i will appericiateur help.
I have to use getopts in this,i am a newbie in shell scripting and learning it.
•
•
Join Date: Aug 2007
Posts: 49
Reputation:
Solved Threads: 0
Here is the script which i am trying to write but its not creating the backuplocation.
I need help in the script kindly help me out experts.
Shell Scripting Syntax (Toggle Plain Text)
#!/bin/ksh # Copyright (c) 2000 Telcordia Technologies, Inc., # All Rights Reserved. # # Telcordia Confidential - Restricted Access # # This document contains proprietary information that shall be # distributed or routed only within Telcordia Technologies, Inc., # and its authorized clients, except with written permission of # Telcordia # # @(#)mt_clean 107.2 01/18/08 # created on 01/18/08 at 08:58:17 Namish Tiwari #Get the INTAS release number RELEASE=${PATH##*/OCU_} RELEASE=${RELEASE%%/bin:*} DEBUGGING='' WhenToRun="01:00" 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* *_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 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)option="$OPTARG" echo "Delete or Backup option" if [[ $option = "delete" ]]; then for files in $FileLocation do touch $files $files.$(date +%a) cd $INTAS_INSTALL_DIR/envsw/logs rm -f $FilesToDelete echo " Middletier is cleaned up" done fi if [[ $option = "backup" ]]; then 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 else 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 fi l_flag=Y Llcron=l # cd /intasmut2/envsw/logs #mkdir -p $BackupLocation >/dev/null 2>&1 #cp $FilesToDelete $BackupLocation fi ;; 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 ;; 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 "Typical usage: $Progname -a <delete or backup> location 2:00 " echo "This will schedule backups at 2am each night, purge files more than 14 days old" 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_ERROR
I need help in the script kindly help me out experts.
![]() |
Other Threads in the Shell Scripting Forum
- Previous Thread: Please help me write this simple script
- Next Thread: crontab output
| Thread Tools | Search this Thread |





