
私は電子メールとクラウド サービスのバックアップ スクリプトを作成しています。
簡単にするために、ここではメール バックアップ部分のみを投稿しました。
基本的に、いくつかの仮想ボックスが稼働しているホストマシンがあります。
これらの仮想ボックスは/mnt/alias/storage/
、vmail フォルダ (私の場合は shishaMail と呼ばれます) がある ホストマシンにアクセスします。
(以下は必須情報ではないかもしれません)
中にあるものはすべて、素敵な名前の付いたフォーム/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' /mnt/alias/storage/shishaMail
tar: メンバー名から先頭の `/' を削除しています
tar (子): '/mnt/alias/backup/2014/06/13/shisha_10_25_.data.tar.gz': 開けません: そのようなファイルまたはディレクトリはありません
tar (子): エラーは回復できません: 終了します
失敗!!
ご覧のとおり、echo
COMMAND3 は次のようになります。
tar -czvf '/mnt/alias/backup/2014/06/13/shisha_10_21_.data.tar.gz' /mnt/alias/storage/shishaMail
また、このコマンドを手動で実行すると、スクリプトを実行するのと同じユーザー (どちらの場合も root) として、スクリプトは動作します。ファイル以外のディレクトリは存在し、このファイルは によって作成される必要がある
ため、スクリプトがファイルまたはディレクトリが存在しないとエラーを出す理由がわかりません。 *.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' を展開しようとするため、おそらく望んでいる結果にはなりません。中括弧を使用すると変数が目立つようになり、見つけやすくなるため、使用しても問題はありません。