バックアップ用スクリプトファイルを用意。
pg_dump.sh
#/bin/sh TARGET_DB='rails_app_production' HOME_DIR=/home/postgres/dump LOG_FILE=$HOME_DIR/pg_dump.log BACKUP_DIR=$HOME_DIR/dump_files echo >>$LOG_FILE echo `date` "[ pg_dump Start. ]" >>$LOG_FILE DATE=`date +%Y%m%d` for db_name in $TARGET_DB do DUMP_FILE_PATH=$BACKUP_DIR/${db_name}.${DATE} /usr/bin/pg_dump $db_name -b -O -Fc > $DUMP_FILE_PATH 2>>$LOG_FILE echo `date` "[ Database $db_name Backup Complete. ]" >>$LOG_FILE done echo `date` "[ pg_dump Complete. ]" >>$LOG_FILE
crontabの編集。
$ crontab -e # 毎日午後8時に実行 # 0 20 * * * sh /home/postgres/pg_dump.sh > /dev/null # テスト(毎分実行) */1 * * * * sh /home/postgres/pg_dump.sh > /dev/null
tailで確認。
syslog
$ tail -f /var/log/syslog Aug 8 19:01:01 wwwexample CRON[1234]: (postgres) CMD (sh /home/postgres/pg_dump.sh > /dev/null) Aug 8 19:02:01 wwwexample CRON[1235]: (postgres) CMD (sh /home/postgres/pg_dump.sh > /dev/null) Aug 8 19:03:01 wwwexample CRON[1236]: (postgres) CMD (sh /home/postgres/pg_dump.sh > /dev/null)
pg_dump.log
$ tail -f /home/postgres/dump/pg_dump.log Wed Aug 8 19:01:01 JST 2012 [ pg_dump Start. ] Wed Aug 8 19:01:01 JST 2012 [ Database rails_app_production Backup Complete. ] Wed Aug 8 19:01:01 JST 2012 [ pg_dump Complete. ] Wed Aug 8 19:02:01 JST 2012 [ pg_dump Start. ] Wed Aug 8 19:02:01 JST 2012 [ Database rails_app_production Backup Complete. ] Wed Aug 8 19:02:01 JST 2012 [ pg_dump Complete. ] Wed Aug 8 19:03:01 JST 2012 [ pg_dump Start. ] Wed Aug 8 19:03:01 JST 2012 [ Database rails_app_production Backup Complete. ] Wed Aug 8 19:03:01 JST 2012 [ pg_dump Complete. ]
DUMPファイルの確認。
$ ls -l /home/postgres/dump/dump_files/ -rw-rw-r-- 1 postgres postgres 1234567 8月 8 19:03 rails_app_production.20120808
※crontabの内容を毎日8時に実行する設定に切り替えて終了。