쉘 스크립트에서 로컬로 파일 백업

쉘 스크립트에서 로컬로 파일 백업

이것은 내 크론탭입니다:

crontab -e
30 5 * * * sh /home/donato/Documents/pg_bak.sh

매일 아침 5시 30분에 pg_bak.sh라는 쉘 스크립트를 실행하고 싶습니다.

쉘 스크립트의 내용은 다음과 같습니다.

#!/bin/bash

PG_USER=donato
DATABASE=mydb
SERVER=216.58.219.174
DIR="$HOME/pg_bak"
DATE=$(date +"%m_%d_%y")
FILE="$DATABASE_$DATE"
# pass @ .pgpass

PG_BAK_NOW () {
  pg_dump -h $SERVER -U $PG_USER $DATABASE -f $FILE.sql  
}

echo "Ready to dump to $FILE" >> "$HOME/pg_status" 

cd $DIR
if [ -f "$FILE" ];
then
  rm $FILE
  PG_BAK_NOW 
else
  PG_BAK_NOW
fi

원격 서버가 아닌 로컬 컴퓨터의 ~/pg_bak에 있는 SQL 파일을 백업하고 싶습니다. 즉, 원격 서버의 파일을 백업하고 싶지 않습니다. pg_dump 명령이 원격 서버에서 실행 중인 머신의 컨텍스트에서 실행됩니까?

답변1

그냥 사용

pg_dump -h $SERVER -U $PG_USER $DATABASE > $FILE.sql 

명령 결과를 로컬 시스템에 출력합니다. 더 작은 덤프를 얻으려면 먼저 gzip이나 이와 유사한 것을 통해 파이프할 수 있습니다.

이제 여기에 왔으니 몇 가지 다른 제안을 드리겠습니다.

30 5 * * * /home/donato/Documents/pg_bak.sh

스크립트를 실행하기 위해 호출이 필요하지 않으며 sh소유자 실행 비트만 제공하면 됩니다.

에코 직후 스크립트의 전체 코드 블록은 다음과 같이 변경될 수 있습니다.

cd $DIR
rm $FILE 2>/dev/null
PG_BAK_NOW 

사실, 이제는 pg_dump한 번만 호출하기 때문에 함수로 래핑할 필요가 없습니다. 그냥 직접 호출하면 됩니다.

관련 정보