ログを別サーバへローテートのシェル

※expect のインストール要

# yum -y install expect
#!/bin/sh

# パラメータ
APACHE_DIR="/var/log/httpd/"
ACCESSLOG="access_log"
ERRORLOG="error_log"
DIST=`hostname`

#HOST="192.168.80.222"
HOST="ManageServer"
USER="user"
PASS="password"
TARGET_DIR="/var/log_backup"
yes="yes"


###############################################################################
# アクセスログ、エラーログを圧縮
# apache の再起動は安全の為に graceful で行いたいが、
# cronですると再起動に失敗する
#

# バックアップ日付(現在時刻)の取得
BKDATE=`date +%Y%m%d_%H%M%S`

# 各ログファイルを日付つきにリネーム
mv $APACHE_DIR$ACCESSLOG $APACHE_DIR$DIST.$ACCESSLOG.$BKDATE
mv $APACHE_DIR$ERRORLOG $APACHE_DIR$DIST.$ERRORLOG.$BKDATE

# apacheを再起動
#apachectl -k graceful
/etc/rc.d/init.d/httpd restart

# 日付つきログファイルを圧縮
gzip $APACHE_DIR$DIST.$ACCESSLOG.$BKDATE
gzip $APACHE_DIR$DIST.$ERRORLOG.$BKDATE


###############################################################################
# 管理サーバへSCPでバックアップ
# except+SCPでシェルスクリプト内にパスワードを持たせるのは
# bad know-howとの指摘も。。。
#

# access_log
expect -c "
    sleep 1
    set timeout 60
    spawn scp $APACHE_DIR$DIST.$ACCESSLOG.$BKDATE.gz $USER@$HOST:$TARGET_DIR
    expect {
        \"Are you sure you want to continue connecting (yes/no)?\" {
            send \"$yes\n\"
            expect \"password:\"
            send \"$PASS\n\"
        } \"password:\" {
            send \"$PASS\n\"
        }
    }
    expect {
        \"100%\" {
            sleep 1
            # error_log
            spawn scp $APACHE_DIR$DIST.$ERRORLOG.$BKDATE.gz $USER@$HOST:$TARGET_DIR
            expect {
                \"password:\" {
                    send \"$PASS\n\"
                }
            }
            expect {
                \"100%\" {
                    exit 1
                }
            }
        }
    }
"