【发布时间】:2012-05-03 10:30:15
【问题描述】:
我正在使用 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 用户运行有关,但我真的不确定。有什么想法吗?
【问题讨论】:
-
在 '-vvv' 模式下运行 ssh 并检查退出代码可能有助于了解失败的原因和原因