0

我正在使用 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 用户运行有关,但我真的不确定。有任何想法吗?

4

1 回答 1

2

当您手动运行它时,您是否以pgpool用户身份运行?SSH 密钥是每个用户的,因此如果您以不同的帐户运行,您将获得不同的结果。

您还可以尝试-i <keypath>使用 SSH 标志来明确地将路径传递给您的密钥。

于 2012-05-03T11:38:41.650 回答