2013-11-25 60 views
0

我試圖執行兩個腳本,這些腳本可作爲具有755權限的遠程主機上的sh文件使用。在遠程主機上執行腳本 - 在本地主機中給出的輸出

我試着從如下客戶端主機callling他們:

REMOTE_HOST="host1" 
BOUNCE_SCRIPT=" 
/code/sys/${ENV}/comp/1/${ENV}/scripts/unix/stopScript.sh ${ENV}; 
/code/sys/${ENV}/comp/1/${ENV}/scripts/unix/startScript.sh ${ENV}; 
" 

ssh ${REMOTE_HOST} "${BOUNCE_SCRIPT}" 

以上線路都在本地主機上的腳本。 在本地主機上運行腳本時,遠程主機上的第一個命令(即stopScript.sh)得到正確執行。它殺死正在運行的進程,它被殺死沒有任何錯誤。 然而,第二個腳本的輸出,即startScript.sh被打印到本地主機窗口,但它打算啓動的進程不在遠程主機上啓動。

任何人都可以讓我知道嗎?

  1. 在遠程主機上執行腳本的方式是否正確?
  2. 我應該在本地看到遠程主機上的運行腳本輸出嗎?即在本地主機的窗口上?

感謝

+0

我嘗試通過在單個命令中創建兩個單獨的命令來修改本地主機上的腳本。即不是從單個BOUNCE_SCRIPT運行stopScript.sh和startScript.sh。我創建了兩個變量。 STOP_SCRIPT =/code/sys/$ {ENV}/comp/1/$ {ENV} /scripts/unix/stopScript.sh $ {ENV} START_SCRIPT =/code/sys/$ {ENV}/comp/1/$ { ENV} /scripts/unix/startScript.sh $ {ENV}。然而,在運行腳本時,它只管理第一個腳本,即stopScript.sh,它運行第二個腳本,即startScript.sh,但它嘗試啓動的進程不再保持在遠程主機上啓動。任何想法可能是錯誤的? – user2654241

+0

我試着進一步使用下面的命令ssh -q $ {REMOTE_HOST} $ {START_SCRIPT} - 並且工作正常。謝謝大家看看這個問題並提出建議。 – user2654241

回答

2

你可以嘗試-n標誌SSH:

ssh -n $REMOTE_HOST "$BOUNCE_SCRIPT" >> $LOG 

手冊頁有更多的信息(http://unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1)。以下是一段代碼:

-n從/ dev/null重定向stdin(實際上,阻止從 stdin讀取)。

+0

-n只是按照預期將輸出重定向到日誌文件。但是startScript.sh應該啓動一個java程序。它打印出java程序啓動的pid,但程序本身並沒有啓動。我無法找到在遠程主機上運行的該pid的程序。 – user2654241

+0

您是否嘗試過在遠程計算機的後臺運行腳本並查看它是否保持運行? 「/code/sys/${ENV}/comp/1/${ENV}/scripts/unix/stopScript.sh $ {ENV}&」 – mousumis

1

用'nohup'預處理startScript.sh行可能會有所幫助。通常情況下,如果您遠程執行命令,它們將在您的ssh會話結束時死亡,nohup允許您的進程在會話結束後繼續存在。知道您的流程是從一開始就開始還是開始流逝然後死亡會很有幫助。

+0

nopes,它沒有幫助。 – user2654241

+0

那麼它開始和死亡或根本不開始? –

+0

還有什麼是打印出來,並嘗試啓動過程err? –

1

我認爲cyber-monk是正確的,你應該用nohup啓動進程來創建一個新的獨立進程。看看你的停止腳本是否正在殺死正確的過程(包括新的過程)。

相關問題