0

データベース ノードがダウンしたときにフェールオーバー スクリプトを実行する PG プールを使用しています。スクリプトは、新しいマスターの特定のファイルに触れ、古いマスターにいくつかの変更を加える必要があります。実行すると問題なく動作しますが、アプリケーションで実行すると動作しません。ホストの詳細が記載された電子メールが送信されるため、スクリプトが適切に実行されていることがわかります。キーが設定されているため、パスワードは必要ありません。

スクリプトは次のとおりです。

#! /bin/sh

OLD_HOST=$1
NEW_HOST=$2

# new host: touch trigger file
/usr/bin/ssh -T root@$NEW_HOST /bin/touch /mirror/pg_trigger/trigger

# old host: remove trigger file
/usr/bin/ssh -T root@$OLD_HOST /bin/rm /mirror/pg_trigger/trigger -f

# old host: rename recovery.done to recovery.conf
/usr/bin/ssh -T root@$OLD_HOST /bin/mv /opt/postgres/9.1/data/recovery.done /opt/postgres /9.1/data/recovery.conf -f

古い/新しいホストがローカル マシンの場合でも機能しません。これは pgpool ユーザーを介して実行されていることに関係しているように感じますが、よくわかりません。何か案は?

4

1 に答える 1

2

手動で実行する場合、pgpoolユーザーとして実行しますか? SSH キーはユーザーごとであるため、別のアカウントで実行している場合は、別の結果が得られます。

SSH でフラグを試して-i <keypath>、キーへのパスを明示的に渡すこともできます。

于 2012-05-03T11:38:41.650 に答える