스크립트파일

git-svn-id: svn://192.168.0.12/source@336 8346c931-da38-4b9b-9d4c-e48b93cbd075
This commit is contained in:
admin
2017-01-06 10:23:35 +00:00
parent 40f29bdf51
commit 80224e09b1
4 changed files with 611 additions and 0 deletions

155
compile.sh Normal file
View File

@@ -0,0 +1,155 @@
#!/bin/bash
WORKING_DIRECTORY=$(pwd)
PATH_SOURCE="$WORKING_DIRECTORY/source"
PATH_COMPILE_PREFIX="$PATH_SOURCE/build-"
PATH_COMPILE_SUFFIX="-Desktop_Qt_5_4_0_GCC_64bit-Release"
QT_QMAKE_PATH="/home/testdb/Qt5.4.0/5.4/gcc_64/bin"
QMAKE="$QT_QMAKE_PATH/qmake"
MAKE_CLEAN=
usage()
{
echo "Usage : compile.sh [options] directory1 [directory2...]"
echo ""
echo " -s, --source Set Qt Project parent directory"
echo " -o, --output Copy executable files to specific directory"
echo " -c, --clean make clean"
echo " -h, --help help"
echo ""
echo "Purpose : compile a Qt project in source/directory1"
}
PATH_OUTPUT=
qtcompile()
{
echo "$1 : "
if [ ! -d "$PATH_SOURCE" ]; then
echo "Fatal Error : Source path does not exists"
echo "Quit compile"
exit 1
fi
if [ ! -d "$PATH_SOURCE/$1" ]; then
echo "Error : Project directory $PATH_SOURCE/$1 does not exists"
return 1
fi
path_source="$PATH_SOURCE/$1/$1"".pro"
if [ ! -f "$path_source" ]; then
echo "Error : Project file $path_source does not exists"
return 1
fi
path_compile="$PATH_COMPILE_PREFIX""$1""$PATH_COMPILE_SUFFIX"
if [ ! -d "$path_compile" ]; then
mkdir $path_compile
fi
if ! cd $path_compile; then
echo "Error : Cannot access $path_compile"
return 1
fi
if [ -n "$MAKE_CLEAN" ]; then
if "$QMAKE" "$path_source" "-r" "-spec" "linux-g++" && "/usr/bin/make" "clean" 1>&/dev/null && "/usr/bin/make" 1>&/dev/null ; then
echo "Success : Make Clean $path_compile"
echo "Success : Compile complete $path_source"
echo "Success : Create File in $path_compile"
else
echo "Error : Compile error - $path_source"
return 1
fi
else
if "$QMAKE" "$path_source" "-r" "-spec" "linux-g++" && "/usr/bin/make" 1>&/dev/null ; then
echo "Success : Compile complete $path_source"
echo "Success : Create File in $path_compile"
else
echo "Error : Compile error - $path_source"
return 1
fi
fi
if [ -n "$PATH_OUTPUT" ]; then
if ! cp "$path_compile/$1" "$PATH_OUTPUT/"; then
echo "Error : Copy error $path_compile/$1 to $PATH_OUTPUT/"
return 1
else
echo "Success : Copy $path_compile/$1 to $PATH_OUTPUT/"
fi
fi
echo ""
return 0
}
if [ $# -eq 0 ]; then
usage
exit 1
fi
#basename
#dirname
while [ "$1" != "" ]; do
case $1 in
-s | --source ) shift
path_source="$(dirname $1)"
if [[ $path_source =~ ^/([^/]+) ]]; then
PATH_SOURCE="$path_source"
elif [ "$path_source" = "." ]; then
PATH_SOURCE="$WORKING_DIRECTORY/$1"
else
PATH_SOURCE="$WORKING_DIRECTORY/$path_source"
fi
;;
-o | --ouput ) shift
if [[ $1 =~ ^/([^/]+) ]]; then
PATH_OUTPUT="$1"
else
PATH_OUTPUT="$WORKING_DIRECTORY/$1"
fi
;;
-c | --clean ) MAKE_CLEAN="clean"
;;
-h | --help ) usage
exit
;;
-* | --* ) echo "Error : Unknown Option $1"
echo " Please check option"
usage
exit 1
;;
* ) dir_name=$(dirname $1)
arg=$(basename $1)
if [ ! "$dir_name" = "." ]; then
path_source="$dir_name"
if [[ $path_source =~ ^/([^/]+) ]]; then
PATH_SOURCE="$path_source"
else
PATH_SOURCE="$WORKING_DIRECTORY/$path_source"
fi
fi
qtcompile $arg
;;
esac
shift
done
exit

281
dbbackup.sh Normal file
View File

@@ -0,0 +1,281 @@
#!/bin/bash
IMPORT_DAYS=(1 3 5 7 9 11 13 15 17 19 21 23 25 27 29)
BACKUP_HOST="192.168.0.30"
BACKUP_PATH="/media/testdb/dump"
BACKUP_USER="testdb"
DATABASE_NAME="concepters"
DATABASE_USER="admin"
DATABASE_PASSWORD="admin123"
LOG_PATH="/home/concepters/log"
LOG_FILENAME="dbbackup.log"
TODAY=$(date +"%Y_%m_%d")
DUMP_PATH="/home/concepters/hdd/mysqlbackup"
DUMP_FILENAME=$TODAY".dump.sql"
DUMP_TOTALPATH="$DUMP_PATH/$DUMP_FILENAME"
MIN_DUMP=5
MAX_DUMP=10
DUMP_OPT="--single-transaction"
DUMP_SCRIPT="/usr/local/bin/dumpscript.sh"
insertlogger()
{
logger "$0 : $1" && echo "$0 : $1" 1>&2
}
#Split new lines
IFS=$'\012'
#Log file check
insertlog()
{
if [ ! -d $LOG_PATH ];then
if ! mkdir $LOG_PATH; then
insertlogger "Fail to make log folder"
return 1
fi
fi
if [ ! -f "$LOG_PATH/$LOG_FILENAME" ]; then
if ! touch "$LOG_PATH/$LOG_FILENAME"; then
insertlogger "Fail to create logfile"
return 1
fi
fi
if [ ! -w "$LOG_PATH/$LOG_FILENAME" ]; then
insertlogger "Permission denied to log file"
return 1
fi
messages="["$(date +"%F %H:%M:%S")"] $0".$$" : $1"
echo "$messages" >> "$LOG_PATH/$LOG_FILENAME" || insertlogger $messages
return 0
}
#Dump day check
isDump()
{
dayofmonth=$(date +"%e")
for i in ${IMPORT_DAYS[@]}; do
if [ $i -eq $dayofmonth ]; then
return 0
fi
done
return 1
}
# Use carefully, this function does not check size of array
getOldestDump()
{
value=( )
# echo $@
r_count=0
for i in $@; do
value[$r_count]=$i
r_count=$((r_count+1))
done
oldestFile=${value[0]};
for i in ${value[@]}; do
if [ $i -ot $oldestFile ]; then
oldestFile=$i
fi
done
echo $oldestFile
}
#Get dumpfile list
#dumpFileList=$(ls -1t "$DUMP_PATH"[0-2][0-9][0-9][0-9]_[0-1][0-9]_[0-3][0-9].dump.sql)
insertlog "Start backup concepters Datadb"
dumpFileList=$(ls -1t "$DUMP_PATH/"*.dump.sql)
#Get number of lists
count=0
for i in ${dumpFileList[@]}; do
#echo $i
count=$((count+1))
done
insertlog "Number of dumpfile = $count"
#remove oldest dumpfile if number of dumpfile is greater equal to MAX_DUMP
oldestDump=
if [ $count -ge $MAX_DUMP ]; then
oldestDump=$(getOldestDump $dumpFileList)
if rm $oldestDump; then
insertlog "Removed $oldestDump"
else
insertlog "Fail to remove $oldestDump"
fi
fi
# Change dumpfile name if a dumpfile already exists
suffix=1
while [ -f "$DUMP_TOTALPATH" ]; do
insertlog "File $DUMP_TOTALPATH already exists!!"
DUMP_FILENAME="$TODAY""_$suffix"".dump.sql"
DUMP_TOTALPATH="$DUMP_PATH/$DUMP_FILENAME"
insertlog "Dumpfile will be saved to $DUMP_TOTALPATH"
suffix=$((suffix+1))
done
# Start dump
insertlog "Start mysqldump to $DUMP_TOTALPATH"
if ! mysqldump -u"$DATABASE_USER" -p"$DATABASE_PASSWORD" "$DUMP_OPT" "$DATABASE_NAME" > "$DUMP_TOTALPATH"; then
insertlog "Mysqldump failed"
exit 1
fi
insertlog "Success mysqldump to $DUMP_TOTALPATH"
# Check dumpfile list, size and free space in the testDB PC
testDumpFileList=$(ssh "$BACKUP_USER"@"$BACKUP_HOST" "ls -alt --block-size=k $BACKUP_PATH/*.dump.sql")
dfScreen=$(ssh "$BACKUP_USER"@"$BACKUP_HOST" "df -k")
lineofdf=$(echo "$dfScreen" | grep "$BACKUP_PATH")
#echo $testDumpFileList
# Extract useful infomation
rxdisk="\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)"
rxfile="([0-9]+)K"
rxpath="\s+([0-9a-zA-Z_/. ]+\.dump.sql)$"
lsdumpfile=$(ls -alt --block-size=k $DUMP_TOTALPATH)
dumpfilesize=
if [[ $lsdumpfile =~ $rxfile ]]; then
dumpfilesize=${BASH_REMATCH[1]}
fi
diskfreespace=
if [[ $lineofdf =~ $rxdisk ]]; then
diskfreespace=${BASH_REMATCH[3]}
fi
filesize=( )
filelist=( )
count=0
for i in ${testDumpFileList[@]}; do
if [[ $i =~ $rxfile ]]; then
filesize[$count]=${BASH_REMATCH[1]}
fi
if [[ $i =~ $rxpath ]]; then
filelist[$count]=${BASH_REMATCH[1]}
fi
count=$((count+1))
done
#echo "Last file = ${filelist[$((count-1))]}"
#for i in "${testDumpFileList[@]}"; do
# echo $i
#done
insertlog "$BACKUP_HOST has $count dump files"
insertlog "$BACKUP_HOST has $diskfreespace kbytes free space"
# Transfer the dumpfile if free space in the testDB PC is enough to save the dumpfile
# This script check free space, size dumpfiles in the testdb PC and a dumpfile made now
# Number of dumpfile in the testDB pc MUST BE GRATHER THAN MIN_DUMP
# If free space is not enough, you have to buy a new hdd or remove old dumpfiles in the testDB PC
# This script will remove older dumpfiles in the testDB PC as guarantee constraints above
if [ $diskfreespace -lt $dumpfilesize ]; then
if [ $count -lt $MIN_DUMP ]; then
insertlog "$BACKUP_HOST has too small free disk space"
insertlog "Need to extend $BACKUP_HOST disk space"
insertlog "Backup is canceled"
exit 1
else
insertlog "Check dumpfiles to remove"
tempcount=$count
calcfreesize=$diskfreespace
while [ $calcfreesize -lt $dumpfilesize ]; do
calcfreesize=$((calcfreesize+filesize[$((tempcount-1))]))
if [ $tempcount -lt $MIN_DUMP ]; then
insertlog "$BACKUP_HOST has too small free disk space"
insertlog "Need to extend $BACKUP_HOST disk space"
insertlog "Backup is canceled"
exit 1
fi
tempcount=$((tempcount-1))
done
for ((i=tempcount-1;i<count;i++)); do
insertlog "Start to remove $BACKUP_HOST:${filelist[$((i-1))]}"
if ! ssh "$BACKUP_USER@$BACKUP_HOST" "rm ${filelist[$((i-1))]}"; then
insertlog "Failed to Remove $BACKUP_HOST:${filelist[$((i-1))]}"
insertlog "Stop to transfer file"
exit 1
fi
done
insertlog "Start to transfer $DUMP_TOTALPATH to $BACKUP_HOST:$BACKUP_PATH/"
if ! scp "$DUMP_TOTALPATH" "$BACKUP_USER@$BACKUP_HOST:$BACKUP_PATH/"; then
insertlog "Fail to transfer dumpfile"
exit 1
fi
insertlog "Success transfer dump file"
fi
else
if [ $count -lt $MAX_DUMP ]; then
insertlog "Start to transfer $DUMP_TOTALPATH to $BACKUP_HOST:$BACKUP_PATH/"
if ! scp "$DUMP_TOTALPATH" "$BACKUP_USER@$BACKUP_HOST:$BACKUP_PATH/"; then
insertlog "Fail to transfer dumpfile"
exit 1
fi
insertlog "Success transfer dump file"
else
insertlog "Start to remove $BACKUP_HOST:${filelist[$((count-1))]}"
if ! ssh "$BACKUP_USER@$BACKUP_HOST" "rm ${filelist[$((count-1))]}"; then
insertlog "Failed to Remove $BACKUP_HOST:${filelist[$((count-1))]}"
fi
insertlog "Start to transfer $DUMP_TOTALPATH to $BACKUP_HOST:$BACKUP_PATH/"
if ! scp "$DUMP_TOTALPATH" "$BACKUP_USER@$BACKUP_HOST:$BACKUP_PATH/"; then
insertlog "Fail to transfer dumpfile"
exit 1
fi
insertlog "Success transfer dump file"
fi
fi
# If today is dumpdays, insert dumpfiles to testDb PC
if isDump; then
insertlog "Start to insert dumpfiles into $BACKUP_HOST Database"
if ! ssh "$BACKUP_USER@$BACKUP_HOST" "$DUMP_SCRIPT $DUMP_FILENAME"; then
insertlog "Extracting dump file is failed"
exit 1
fi
insertlog "Success to insert dumpfile into $BACKUP_HOST Database"
fi
insertlog "Backup complete successfully"
exit

167
dumpscript.sh Normal file
View File

@@ -0,0 +1,167 @@
#!/bin/bash
LOG_PATH="$HOME/log"
LOG_FILENAME="dumplog.log"
BACKUP_PATH="/media/testdb/dump"
BACKUP_TOTALPATH="$BACKUP_PATH/$1"
BACKUP_FILENAME=$1
MYSQL_USER="admin"
MYSQL_PASSWORD="admin123"
DATABASE_GROUPONE=(1 7 13 19 25)
DATABASE_GROUPTWO=(3 9 15 21 27)
DATABASE_GROUPTHREE=(5 11 17 23 29)
DATABASE_ONENAME="CTBBG1"
DATABASE_TWONAME="CTBBG2"
DATABASE_THREENAME="CTBBG3"
DAYOFMONTH=$(date +"%e")
IFS=$'\012'
# Log
insertlogger()
{
logger "$0 : $1" && echo "$0 : $1" 1>&2
}
insertlog()
{
if [ ! -d $LOG_PATH ];then
if ! mkdir $LOG_PATH; then
insertlogger "Fail to make log folder"
return 1
fi
fi
if [ ! -f "$LOG_PATH/$LOG_FILENAME" ]; then
if ! touch "$LOG_PATH/$LOG_FILENAME"; then
insertlogger "Fail to create logfile"
return 1
fi
fi
if [ ! -w "$LOG_PATH/$LOG_FILENAME" ]; then
insertlogger "Permission denied to log file"
return 1
fi
messages="["$(date +"%F %H:%M:%S")"] $0".$$" : $1"
echo "$messages" >> "$LOG_PATH/$LOG_FILENAME" || insertlogger $messages
return 0
}
insertlog "Start to extract dumpfile"
# Check parameter 1
# If parameter 1 is empty, check BACKUP_PATH and recent dump file will be extracted
if [ -z "$1" ]; then
if ! ls -t "$BACKUP_PATH/"*".dump.sql"; then
insertlog "Fail to find dumpfile in $BACKUP_PATH"
exit 1
fi
filenamelist=$(ls -t "$BACKUP_PATH/"*".dump.sql")
for i in ${filenamelist[@]}; do
BACKUP_TOTALPATH=$i
break
done
fi
insertlog "$BACKUP_TOTALPATH"
# Check form of dump file is valid and extract the day when the dumpfile is created
rx="/[0-9]{4}_[0-9]{2}_([0-9]{2})\w*\.dump\.sql"
day=
if [[ $BACKUP_TOTALPATH =~ $rx ]]; then
day=${BASH_REMATCH[1]}
fi
if [ -z "$day" ]; then
insertlog "Check dumpfile name YYYY_MM_DD.dump.sql or YYYY_MM_DD_N.dump.sql"
insertlog "Fail to dump file"
exit 1
fi
databasename=
previousname=
# Determine where to import the dumpfile
for i in ${DATABASE_GROUPONE[@]}; do
if [ $i -eq $day ]; then
databasename=$DATABASE_ONENAME
previousname=$DATABASE_TWONAME
fi
done
for i in ${DATABASE_GROUPTWO[@]}; do
if [ $i -eq $day ]; then
databasename=$DATABASE_TWONAME
previousname=$DATABASE_THREENAME
fi
done
for i in ${DATABASE_GROUPTHREE[@]}; do
if [ $i -eq $day ]; then
databasename=$DATABASE_THREENAME
previousname=$DATABASE_ONENAME
fi
done
# If today is not dump day, extracting dump is canceled
if [ -z "$databasename" ]; then
insertlog "Today is not dump day"
insertlog "Extracting dump is canceled"
exit 1
fi
#echo "databasename = $databasename"
#echo "previousname = $previousname"
# Remove all tables in the oldest backup DB
insertlog "Start to delete $previousname tables"
showtables=$(mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" $previousname -e "show tables")
rxtable="(\w+)"
tablelist=( )
count=0
if [ ! -z "$showtables" ]; then
for i in ${showtables[@]}; do
if [[ $i =~ $rxtable ]]; then
tablelist[$((count))]=${BASH_REMATCH[1]}
count=$((count+1))
fi
done
fi
for((i=1;i<count;i++)); do
# echo ${tablelist[$((i))]}
if ! mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" $previousname -e "drop table ${tablelist[$((i))]}"; then
insertlog "Removing $previousname ${tablelist[$((count))]} is failed"
else
insertlog "Success to remove $previousname ${tablelist[$((i))]}"
fi
done
# Start to import dump
insertlog "Start to extract dump - $BACKUP_TOTALPATH to $databasename"
if ! mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" $databasename < "$BACKUP_TOTALPATH"; then
insertlog "Fail to extract dump - $BACKUP_TOTALPATH"
exit 1
fi
insertlog "Success to extract dump - $BACKUP_TOTALPATH"
insertlog "Success to extract dumpfile"
exit

8
sendexec.sh Normal file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
CLIENT_LIST_FILE="clusterssh/client.list"
while read line
do
IFS='@' read -ra str <<< "$line"
scp execfiles/* $line:/home/${str[0]}/execfiles/
done < $CLIENT_LIST_FILE