이메일과 클라우드 서비스에 대한 백업 스크립트를 작성 중입니다.
단순화를 위해 여기에는 이메일 백업 부분만 게시합니다.
기본적으로 일부 가상 상자가 실행되는 호스트 시스템이 있습니다. 이러한 가상 상자는 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' /mnt/alias/storage/shishaMail
tar:from member 이름 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"를 확장하려고 시도하지만 원하는 결과가 아닐 수 있습니다. 변수를 눈에 띄게 만들고 선택하기 쉽게 만들기 때문에 사용하는 것이 결코 나쁠 수 없습니다.