スクリプト

画像を一括でリサイズする

$ for file in *.jpg
> do
> convert -size 640x480 $file ./$file
> done

バックアップを自動で取る

Dir構成
backup.list

/etc/
/var/lib/dpkg
/var/lib/aptitude/pkgstates
/var/www
/var/lib/mysql
/var/spool/qmail

list.conf

SERVER='comuro' #バックアップ対象サーバのホスト名
LOGPATH='/var/log/backup/' #ログの出力先
BACKUPSERVER='192.168.12.6' #バックアップ先のサーバのIP
BACKUPDIR='/home/backup/' #バックアップを置くディレクトリ。権限を確認しておく
USER='aya' #実行ユーザー。バックアップ元と先に存在する必要がある

doBackup.sh

#!/bin/bash
TODAY=$(date +%y%m%d)
MONTH=$(date +%y%m) 
##edit this line ########
CONFIGDIR='./'
#####################
CONFIG=$CONFIGDIR'list.conf'
BACKUPLIST=$CONFIGDIR'backup.list'

if [ -f $CONFIG -a -e $BACKUPLIST ]
 then
   . $CONFIG
 else
   echo 'Config files are missing!'
   exit
fi
#####################
#create tmp dir
ARCHIVEDNAME=$SERVER'-backup-'$TODAY
TMPDIR='/tmp/'$ARCHIVEDNAME
mkdir $TMPDIR
# create log file
LOG=$LOGPATH'/daily'$TODAY'.log'

if [ ! -e $LOG ]; then
   touch $LOG
   echo '['$TODAY']created Log' >> $LOG
fi
echo '['$TODAY']Copy started' >> $LOG

for BACKUPFILE in `cat $BACKUPLIST` ; do
   if [ ! -d $BACKUPFILE ]; then
       echo '['$TODAY']'$BACKUPFILE' does not exist!' >> $LOG
   else
       TMPNAME=`echo $BACKUPFILE | sed -e "s/\//_/g"`
       cp -r $BACKUPFILE $TMPDIR'/'$TMPNAME
       echo '['$TODAY']Copied' $BACKUPFILE >> $LOG
   fi
done
touch $TMPDIR/dpkg-list.txt
/usr/bin/dpkg -l >> $TMPDIR/dpkg-list.txt
cp $LOG $TMPDIR

tar czf $TMPDIR'.tar.gz' $TMPDIR
#もしローカル内でバックアップを持っておく場合は/homeに退避させるとよいと思う。
#if [ -d $BACKUPDIR ]; then
#   mv $TMPDIR'.tar.gz' /home/backup
#fi

#もし別サーバに持っていく場合は、rsyncを使った方が早いという噂が。
#パスワード無しの鍵交換式で持っていくと楽

#/usr/bin/rsync -az -e "ssh -i /root/.ssh/rsync" $TMPDIR.tar.gz root@$BACKUPSERVER:$BACKUPDIR$SERVER/$MONTH/$ARCHIVEDNAME.tar.gz
#/usr/bin/rsync -avz -e ssh $TMPDIR.tar.gz  $USER@$BACKUPSERVER:$BACKUPDIR$ARCHIVEDNAME.tar.gz

#HDの容量が厳しかったら削除しておく
#rm -r $TMPDIR

メールがあるかどうか実際に送信する

Dir構成
check.sh

#!/bin/bash
DIRPATH='/var/www/example/script/MTA/'
CHECK_MAIL_LIST=$DIRPATH'mail.list'
MAILFROM='メールの送り主'
for EACH_MAIL in `cat $CHECK_MAIL_LIST` ; do
   cat $DIRPATH'template.txt' | /usr/sbin/sendmail -bm -f $MAILFROM -i $EACH_MAIL
done

template.txt

------
Mail check!
------

mail.list

気になるメール@popowa.com
やっぱり気になる@popowa.com
これは恋@popowa.com

check.shに実行権限をつけて
crontab -eで

10 6 * * * /bin/sh /var/www/example/script/MTA/check.sh

と指定すると送ってくれる

個別のTableをmysqldumpする

通常のmysqldumpはdatabase もしくは個別のテーブルを指定しないとdumpしてくれないので、一覧を読み込みdumpする
dump.sh

#!/bin/bash
DIRPATH='/var/data/dumpEach/'
TABLE_LIST=$DIRPATH'dump-list.txt'
USER='dump23User'
PASSWORD='dump641password'
DATABASE='dump_database'

for TABLE in `cat $TABLE_LIST` ; do 
	/usr/bin/mysqldump --opt -c -u$USER -p$PASSWORD  --default-character-set=binary $DATABASE $TABLE > $DIRPATH$TABLE'.sql'
done

dump.shに実行権限をつけて
crontab -eで

10 6 * * * /bin/bash /var/data/dumpEach/dump.sh

と指定すると個別のtableをdumpしてくれるはず

上記拡張版

#!/bin/bash
REMOTEUSER='aya'
DIRPATH='/var/data/dumpEach/'
DIRNAME='data'
TABLE_BK=$DIRPATH'dump-list-bk.txt'
TABLE_CH=$DIRPATH'dump-list-ch.txt'

USER='dump23User'
PASSWORD='dump641password'
DATABASE='dump_database'


cd $DIRPATH
mkdir $DIRNAME 

for TABLE in `cat $TABLE_BK` ; do 
	/usr/bin/mysqldump --opt -c -u$USER -p$PASSWORD  --default-character-set=binary $DATABASE $TABLE > $DIRPATH$DIRNAME'/'$TABLE'.sql'
done

for TABLE in `cat $TABLE_CH` ; do 
	/usr/bin/mysqldump --opt -c -u$USER -p$PASSWORD  --default-character-set=binary $DATABASE $TABLE > $DIRPATH$DIRNAME'/'$TABLE'.sql'
done

/bin/tar czf $DIRNAME'.tar.gz' $DIRPATH$DIRNAME
/usr/bin/rsync -az $DIRPATH$DIRNAME'.tar.gz' remote.example.jp:/home/$REMOTEUSER/

参考URL


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-03-12 (月) 16:54:37 (197d)