Shell-Script

使用 ssh 在遠端主機上執行腳本不返回

  • April 21, 2021

我們在遠端主機上有幾個腳本,我們使用 ssh 從我的本地主機觸發,如下所示。

ssh remuser@remhost sh /web/bin/stop.sh

我們在這個週末發布了作業系統更新檔活動,上面的 ssh 命令永遠不會返回,感覺就像掛起或等待輸入。

可能很難獲得有關作業系統應用了哪些更新檔的詳細資訊。

這是stop.sh的詳細資訊

cat stop.sh
exec /usr/bin/java -jar /web/service.jar -DLOG_PATH=/web/logs --server.address=10.23.41.211 --server.port=10500 --spring.profiles.active=dev >> /web/logs/boot.log
exit 0;

首先,我們從這個論壇嘗試了這個解決方案,但它沒有返回。

ssh remuser@remhost 'sh /web/bin/stop.sh my.jar dev &> /dev/null < /dev/null'

ssh -vv凍結且不返回時的調試輸出如下:

debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
debug2: channel 0: rcvd eow
debug2: channel 0: chan_shutdown_read (i0 o0 sock -1 wfd 4 efd 6 [write])
debug2: channel 0: input open -> closed

然後我們嘗試了以下操作,ssh 開始返回,但無法在遠端主機上執行腳本。

ssh -fN remuser@remhost sh /web/bin/stop.sh my.jar dev

注意:ssh remuser@remhost id確實返回並且工作正常。其他腳本也可以正常工作。

問題僅在於具有<or <<> or >>控制返回到呼叫程序主機的腳本。

你能建議嗎?

注意:沒有理由調試腳本。它們不是問題的原因,因為所有腳本都不同並且有些非常簡單。

以下幫助解決了這個問題,現在在目標主機上執行腳本時控制項又回來了。

ssh -f -n remuser@remhost 'sh -c /web/bin/stop.sh my.jar dev'

引用自:https://unix.stackexchange.com/questions/645988