はじめに
環境は以下のとおり
- Centos6.7
- PostgreSQL9.4.6
やりたいこと
以下のPostgreSQLのダンプ処理をシェルで実行させたい。
sudo pg_dump -a -Fc -h xxx.xxx.xxx.xxx -p 5432 -U db_user sample -n public -f /tmp/dump.sql
expectコマンドによる実現
上記のダンプ処理を実行する場合、バッチ実行ユーザ(batch_user)とPostgreSQLユーザ(db_user)の両方のパスワードの入力が必須となる。
[sudo] password for batch_user:
パスワード:
このパスワード入力について、省略もしくは自動入力化する必要がある。
PostgreSQLユーザのパスワードを省略したい場合、パスワードファイル を使用するやりかたもあるが、今回はバッチ実行ユーザのパスワード入力も省略させたい。
なので今回は、以下のようにexpectコマンドを使用し、2つのパスワードの自動入力を実現させた。
/tmp/auto_dump.sh
# !/bin/bash
# バッチ実行ユーザのパスワード
USER_PWD="xxx"
# PostgreSQLユーザのパスワード
DB_USER_PWD="yyy"
# dump実行
expect -c "
set timeout 5
spawn sudo pg_dump -a -Fc -h xxx.xxx.xxx.xxx -p 5432 -U db_user sample -n public -f /tmp/dump.sql
expect \"\[sudo\] password for batch_user:\"
send \"${USER_PWD}\n\"
expect \"パスワード:\"
send \"${DB_USER_PWD}\n\"
sleep 2
expect \"\n\"
send \"exit\n\"
"
実行してみる
# ダンプシェルの実行
sh /tmp/auto_dump.sh
spawn sudo pg_dump -a -Fc -h xxx.xxx.xxx.xxx -p 5432 -U db_user sample -n public -f /tmp/dump.sql
[sudo] password for batch_user:
パスワード:
# ダンプファイルの確認
ls /tmp
dump.sql