이것은 내 크론탭입니다:
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
한 번만 호출하기 때문에 함수로 래핑할 필요가 없습니다. 그냥 직접 호출하면 됩니다.