
メールとクラウドサービスのバックアップスクリプトを作成しています。
簡単にするために、ここでは電子メールのバックアップ部分のみを公開します。
デフォルトでは、いくつかの仮想ボックスが実行されるホストシステムがあります。これらの仮想ボックスは、vmailフォルダ(私の場合はshishaMailと呼ばれる)がある
ホストシステムにアクセスします。/mnt/alias/storage/
(下記は必ずしも必要な情報ではない場合があります。)
私が言いたいのは、その中のすべてが美しい名前の人から/mnt/alias/
出てきたということです。このラックフォルダにはドライブマウントが含まれています。ln -s
/mnt/rack/*
(不要情報終了)
これは私のスクリプトです。
#!/bin/bash
# backup script
BASEURL="/mnt/alias/backup"
MAILURL="/mnt/alias/storage/shishaMail"
DAY=`eval date +"%d"`
MONTH=`eval date +"%m"`
YEAR=`eval date +"%Y"`
HOUR=`eval date +"%H"`
MINUTE=`eval date +"%M"`
PIMPURL=$BASEURL/$YEAR/$MONTH/$DAY/
COMMAND1="cd $PIMPURL"
$COMMAND1 2>/dev/null
if [ $? -eq 0 ]
then
echo "Command 1 was successful"
else
echo "There ain't folders!!"
echo "I'll mkdir some!"
COMMAND2="mkdir -p $PIMPURL"
$COMMAND2 2>/dev/null
fi
if [ $? -eq 0 ]
then
echo 'Command 1 or/and 2 was successful'
echo "STARTING MAIL BACKUP"
COMMAND3="tar -cvzf '"$PIMPURL"shisha_"$HOUR"_"$MINUTE"_.data.tar.gz' "$MAILURL
echo $COMMAND3
$COMMAND3 2>/dev/null
if [ $? -eq 0 ]
then
echo 'MAIL BACKUP SUCCESSFULL'
else
echo "FAILURE!!"
fi
else
echo 'Nope! Must be some kind of strage Err0r!!'
fi
したがって、このスクリプトを実行すると、次のエラーが発生します。
コマンド 1 成功
コマンド 1 または 2 の成功
メール バックアップの開始 tar
-czvf '/mnt/alias/backup/2014/06/13/shisha_10_25_.data.tar.gz'
名前 tar(sub) から先行する '/' を削除:
'/mnt/alias/backup/2014/06/13/shisha_10_25_.data.tar.gz': オープンできません: 対応するファイルまたはディレクトリなし
tar(sub): エラー回復不能:今すぐ終了
できませんでした! !
ご覧のとおり、echo
次のCOMMAND3があります。
tar -czvf '/mnt/alias/backup/2014/06/13/shisha_10_21_.data.tar.gz' /mnt/alias/storage/shishaMail
スクリプトを実行したのと同じユーザー(どちらの場合もルート)として、このコマンドを手動で実行すると機能します。ファイルを除いてディレクトリが存在するため、スクリプトが
存在しないファイルやディレクトリについて文句を言う理由は理解できません。 *.tar.gz
tar
答え1
COMMAND3生成行から単一引用符を削除してみてください。
COMMAND3="tar -cvzf "$PIMPURL"shisha_"$HOUR"_"$MINUTE"_.data.tar.gz "$MAILURL
その行を手動で実行すると、tarは引数を見る前にシェルが引用符を削除します。
ファイル名にスペースを挿入しないため、引用符は必要ありません。実際、この行をさらに簡素化できます。
COMMAND3="tar -cvzf ${PIMPURL}shisha_${HOUR}_${MINUTE}_.data.tar.gz ${MAILURL}"
中かっこは変数名を区切るために使用されます。それ以外の場合は、「PIMPURLshisha」を拡張しようとしますが、目的の結果ではない可能性があります。変数を目立たせて選択しやすくするので、使用することは決して悪くありません。