いくつかのデータベースをダンプして gz する bash スクリプトがあります。次に、scp (この目的のために特別に作成された特定のユーザー) を使用して、ファイルをバックアップ サーバーに転送する expect スクリプトを呼び出します。以下は bash スクリプトです。
backupbases.sh
ファイル:
#!/bin/bash
today=$(date +"%Y-%m-%d")
dumpPath=/home/mbackup/
remotePass=thereispassword
for db in $(mysql -e 'show databases' -s --skip-column-names); do
dbname=$db
if [ $dbname == "somedatabasename" ]; then
fname=$today"-mr1a-"$db".gz"
if [ -x $dumpPath$fname ]; then
rm $dumpPath$fname
fi
mysqldump $db | gzip -c > $dumpPath$fname
expect transfer.sh mbackup@server_address:/home/mbackup/$fname $dumpPath$fname $remotePass
#rm $dumpPath$fname
fi
done
tansfer.sh
ファイル:
#!/usr/bin/expect -f
# connect via scp
set remote [lindex $argv 0]
set localpath [lindex $argv 1]
set password [lindex $argv 2]
spawn scp $localpath "$remote"
#######################
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send "$password\r"
}
}
expect eof
私を悩ませているのは、パスワードが#
コメントとして解釈される可能性のある記号で終わっているがbackupbases.sh
、コンソールで呼び出すと bash/expect が正常に実行されることです。残念ながら、crontab がそれを呼び出すと、bash 部分のみが実行されます。データベースはダンプされますが、ファイルは転送されません。もちろん、パスワードとサーバーアドレスが提供されます。
それを解決する方法は?