我正在使用 PG 池,它在数据库节点出现故障时执行故障转移脚本。脚本需要在新的master上触及某个文件,并在旧的master上做一些改变。当我运行它时它工作正常,但当它由应用程序运行时它不会。我知道脚本正在正确执行,因为它会向我发送一封包含主机详细信息的电子邮件。设置了密钥,因此不需要密码。
脚本如下:
#! /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 用户运行有关,但我真的不确定。有任何想法吗?