当应用程序执行脚本时,不会运行bash脚本中的SSH命令

时间:2012-05-03 10:30:16

标签: bash ssh pgpool

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

1 个答案:

答案 0 :(得分:2)

手动运行时,您是否以pgpool用户身份运行? SSH密钥是针对每个用户的,因此如果您作为其他帐户运行,则会得到不同的结果。

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