【问题标题】:SSH command in a bash script isn't run when the script is executed by an application当应用程序执行脚本时,不会运行 bash 脚本中的 SSH 命令
【发布时间】: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 并检查退出代码可能有助于了解失败的原因和原因

标签: bash ssh pgpool


【解决方案1】:

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

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

【讨论】:

  • 不,我以 root 身份运行。这可能是个问题,我现在测试一下。
猜你喜欢
  • 2016-11-15
  • 2016-11-09
  • 2014-12-13
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
相关资源
最近更新 更多