Shell-Script
使用 ssh 在遠端主機上執行腳本不返回
我們在遠端主機上有幾個腳本,我們使用 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'