diff --git a/src/scripts/backupcleaner b/src/scripts/backupcleaner new file mode 100755 index 00000000000..d11c45cdb70 --- /dev/null +++ b/src/scripts/backupcleaner @@ -0,0 +1,127 @@ +#!/bin/bash +# +# Copyright 2006 The Apache Software Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Shell script to clean up backups of a Solr Lucene collection. + +orig_dir=$(pwd) +cd ${0%/*}/.. +solr_root=$(pwd) +cd ${orig_dir} + +unset days num data_dir user verbose +. ${solr_root}/bin/scripts-util + +# set up variables +prog=${0##*/} +log=${solr_root}/logs/${prog}.log + +# define usage string +USAGE="\ +usage: $prog -D | -N [-d dir] [-u username] [-v] + -D cleanup backups more than days old + -N keep the most most recent number of backups and + cleanup up the remaining ones that are not being pulled + -d specify directory holding index data + -u specify user to sudo to before running script + -v increase verbosity +" + +# parse args +while getopts D:N:d:u:v OPTION +do + case $OPTION in + D) + days="$OPTARG" + ;; + N) + num="$OPTARG" + ;; + d) + data_dir="$OPTARG" + ;; + u) + user="$OPTARG" + ;; + v) + verbose="v" + ;; + *) + echo "$USAGE" + exit 1 + esac +done + +if [[ -z ${days} && -z ${num} ]] +then + echo "$USAGE" + exit 1 +fi + +fixUser "$@" + +# user default value for data_dir if not specified +# relative path starts at ${solr_root} +if [[ -z ${data_dir} ]] +then + data_dir=${solr_root}/data +elif [[ "`echo ${data_dir}|cut -c1`" != "/" ]] +then + data_dir=${solr_root}/${data_dir} +fi + +function remove +{ + logMessage removing backup $1 + /bin/rm -rf $1 +} + +start=`date +"%s"` + +logMessage started by $oldwhoami +logMessage command: $0 $@ + +# trap control-c +trap 'echo "caught INT/TERM, exiting now but partial cleanup may have already occured";logExit aborted 13' INT TERM + +if [[ -n ${days} ]] +then + logMessage cleaning up backups more than ${days} days old + for i in `find ${data_dir} -name "backup.*" -maxdepth 1 -mtime +${days} -print` + do + remove $i + done +elif [[ -n ${num} ]] +then + logMessage cleaning up all backups except for the most recent ${num} ones + unset backups count + backups=`ls -cd ${data_dir}/backup.* 2>/dev/null` + if [[ $? == 0 ]] + then + count=`echo $backups|wc -w` + startpos=`expr $num + 1` + if [[ $count -gt $num ]] + then + for i in `echo $backups|cut -f${startpos}- -d" "` + do + remove $i + done + fi + fi +fi + +logExit ended 0 + + diff --git a/src/scripts/scripts-util b/src/scripts/scripts-util new file mode 100755 index 00000000000..6aa54471f46 --- /dev/null +++ b/src/scripts/scripts-util @@ -0,0 +1,81 @@ +#!/bin/bash +# +# Copyright 2006 The Apache Software Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Shell script to disable rsyncd + +export PATH=/sbin:/usr/sbin:/bin:/usr/bin:$PATH + +# set up variables +prog=${0##*/} + +# source the config file if present +confFile=${solr_root}/conf/scripts.conf +if [[ -f $confFile ]] +then + . $confFile +fi + +function fixUser +{ +# set user to $(whoami) if not specified + if [[ -z ${user} ]] + then + user=$(whoami) + fi + +# sudo + if [[ $(whoami) != ${user} ]] + then + sudo -u ${user} $0 "$@" + exit $? + fi + + oldwhoami=$(who -m | cut -d' ' -f1 | sed -e's/^.*!//') + + if [[ "${oldwhoami}" == "" ]] + then + oldwhoami=`ps h -Hfp $(pgrep -g0 ${0##*/}) | tail -1|cut -f1 -d" "` + fi +} + +function timeStamp +{ + date +'%Y/%m/%d %H:%M:%S' +} + +function logMessage +{ + echo $(timeStamp) $@>>$log + if [[ -n ${verbose} ]] + then + echo $@ + fi +} + +function logExit +{ + end=`date +"%s"` + diff=`expr $end - $start` + echo "$(timeStamp) $1 (elapsed time: $diff sec)">>$log + exit $2 +} + +# create logs directory if not there +if [[ ! -d ${solr_root}/logs ]] +then + mkdir ${solr_root}/logs +fi +