데이터 백업을 위한 쉘 스크립트를 작성 중입니다. 내 스크립트는 데이터를 성공적으로 백업합니다. 그러나 디렉토리는 압축되지 않습니다. 쉘 스크립트에서 무엇이 문제인지 찾을 수 없습니다
MONGO_DATABASE="database"
APP_NAME="appname"
MONGO_HOST="localhost"
MONGO_PORT="port"
MONGO_USER=""
MONGO_PASS=""
TIMESTAMP=`date "+%Y-%m-%d-%H-%M-%S"`
MONGODUMP_PATH="mongopath"
BACKUPS_DIR="backup path"
BACKUP_NAME="$APP_NAME-$TIMESTAMP"
# mongo admin --eval "printjson(db.fsyncLock())"
$MONGODUMP_PATH --host $MONGO_HOST -d $MONGO_DATABASE --port $MONGO_PORT
#$MONGODUMP_PATH -d $MONGO_DATABASE
# mongo admin --eval "printjson(db.fsyncUnlock())"
mkdir -p $BACKUPS_DIR
#tar -cvf filename.tar files/directories
mv dump $BACKUP_NAME* $BACKUPS_DIR
tar -cvz -f $BACKUP_NAME.tar.gz $BACKUP_NAME
find $BACKUP_NAME -type d -ctime +10 | xargs rm -rf
#rm -rf $BACKUP_NAME
답변1
문제는 다음 두 줄에 있습니다.
mv dump $BACKUP_NAME* $BACKUPS_DIR
tar -cvz -f $BACKUP_NAME.tar.gz $BACKUP_NAME
첫 번째 줄의 이동을 사용 dump
하고 $BACKUP_NAME*
현재 디렉터리를 떠난 다음 현재 디렉터리에서 두 번째 줄의 아카이브에 추가하려고 mv
시도하고 있습니다 .$BACKUP_NAME*
내 느낌은 당신이 사용하고 싶을 수도 있다는 것입니다
mv dump "$BACKUP_NAME"* "$BACKUPS_DIR"
tar -cvz -f "$BACKUP_NAME.tar.gz" "$BACKUPS_DIR"
tar
그러면 해당 디렉토리 의 아카이브가 생성됩니다 $BACKUPS_DIR
. 그러나 $BACKUP_NAME*
이 이름으로 파일을 생성하는 것을 볼 수 없기 때문에 왜 첫 번째 줄에 있는지 잘 모르겠습니다 ... (그러나 뭔가 빠졌을 수도 있습니다).
또한 위에서 했던 것처럼 스크립트 전체에서 변수 확장을 참조하는 것을 고려해 보세요. 이는 공백이 포함된 파일이나 디렉터리 이름을 사용하는 경우 특히 중요합니다.