#!/bin/bash basedir=/var/backup/store sqldir=$basedir/sql PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH export LANG=C for dirs in $basedir do [ ! -d "$dirs" ] && mkdir -p $dirs done for dirs in $sqldir do [ ! -d "$dirs" ] && mkdir -p $dirs done param1=$(date +%Y-%m-%d-%H-%M-%S) # Database Backup sqlusername=root sqlpassword=Z2PG82SMtQzD mysqldump=/usr/bin/mysqldump bwlimit=--bwlimit=100K #bwlimit= sqldbname=dbispconfig sqlsavetarget=$sqldir/$sqldbname.sql rm -rf $sqlsavetarget.7 mv $sqlsavetarget.6 $sqlsavetarget.7 mv $sqlsavetarget.5 $sqlsavetarget.6 mv $sqlsavetarget.4 $sqlsavetarget.5 mv $sqlsavetarget.3 $sqlsavetarget.4 mv $sqlsavetarget.2 $sqlsavetarget.3 mv $sqlsavetarget.1 $sqlsavetarget.2 mv $sqlsavetarget $sqlsavetarget.1 $mysqldump -u $sqlusername -p$sqlpassword --skip-lock-tables -R $sqldbname > $sqlsavetarget /usr/bin/rsync -ah $bwlimit --delete /etc $basedir /usr/bin/rsync -ah $bwlimit --delete /usr/local/ispconfig $basedir
分類: backup
Prevent duplicate shell script executions
Method #1, pidof
I have a /var/backup/systemBackup.sh for system backup.
edit /var/backup/runsystemBackup.sh
#!/bin/bash if pidof -x "systemBackup.sh" >/dev/null; then echo "Process already running" exit 0 fi /var/backup/systemBackup.sh > /dev/null &
try run /var/backup/runsystemBackup.sh
Method #2, lock file
I have a /var/backup/systemBackup.sh for system backup.
edit /var/backup/runsystemBackup.sh
#!/bin/sh lockdir=/tmp BACKUP=/var/backup/systemBackup.sh LOGGER=/usr/bin/logger if [ ! -f /$lockdir/systemBackup.sh ]; then touch $lockdir/systemBackup.sh $BACKUP rm $lockdir/systemBackup.sh else echo "systemBackup.sh already running" $LOGGER -d -t SYSTEM_Backup "systemBackup.sh already running" fi
try run /var/backup/runsystemBackup.sh
Method #3, flock with cron job
# m h dom mon dow user command 5 0 * * * flock -w 0 /tmp/sqlbackup.sh.lock /var/backup/systemBackup.sh