2012-05-03 30 views
0

我正在使用PG池,該池在數據庫節點發生故障時執行故障轉移腳本。該腳本需要觸摸新主設備上的某個文件,並對舊主設備進行一些更改。當我運行它時它工作正常,但它在應用程序運行時不會運行。我知道該腳本正在被適當執行,因爲它向我發送了一封包含主機詳細信息的電子郵件。密鑰已設置,因此不需要密碼。當應用程序執行腳本時,bash腳本中的SSH命令未運行

的腳本如下:

#! /bin/sh 

OLD_HOST=$1 
NEW_HOST=$2 

# new host: touch trigger file 
/usr/bin/ssh -T [email protected]$NEW_HOST /bin/touch /mirror/pg_trigger/trigger 

# old host: remove trigger file 
/usr/bin/ssh -T [email protected]$OLD_HOST /bin/rm /mirror/pg_trigger/trigger -f 

# old host: rename recovery.done to recovery.conf 
/usr/bin/ssh -T [email protected]$OLD_HOST /bin/mv /opt/postgres/9.1/data/recovery.done /opt/postgres /9.1/data/recovery.conf -f 

如果舊/新主機是本地機器,它甚至沒有工作。我有一種感覺,這與它通過pgpool用戶運行有關,但我真的不確定。有任何想法嗎?

+0

以'-vvv'模式運行ssh並檢查退出代碼可能有助於查看失敗的原因以及爲什麼 – bobah

回答

2

當您手動運行它時,您是否以pgpool用戶身份運行? SSH密鑰是每個用戶的,所以如果你作爲一個不同的帳戶運行,你會得到不同的結果。

您也可以使用SSH嘗試-i <keypath>標誌,以明確地將路徑傳遞給您的密鑰。

+0

不,我以根用戶身份運行。這很可能是問題,我現在就來測試一下。 – user705142

+0

pgpool用戶也設置爲SSH訪問,謝謝。 – user705142