2016-07-29 68 views
1

,我有以下的代碼,如果一個腳本(名爲my_script.sh)正在運行,將檢查:檢查遠程進程在運行(Linux)的

ps cax | grep my_script.sh > /dev/null 
if [ $? -eq 0 ] 
then 
    echo "Process is running." 
else 
    echo "Process is not running." 
fi 

不過,我想修改此來檢查進程在另一臺機器上運行,不用直接執行ssh,因爲如果我在循環中運行它,這會使我脫離當前腳本。

從本質上說,我想這樣做:

ssh otherMachine 
ps cax | grep my_script.sh > /dev/null 
if [ $? -eq 0 ] 
then 
    echo "Process is running." 
else 
    echo "Process is not running." 
fi 
ssh originalMachine 

任何幫助,將不勝感激。謝謝!

+0

腳本複製到'otherMachine'並運行它作爲'SSH otherMachine check_script.sh' – Jakuje

+0

@Jakuje我想保持劇本上'originalMachine'因爲最終的計劃是在'originalMachine'上執行其他腳本的過程不在'otherMachine'上運行。 – CdSdw

+0

你是什麼意思,「如果我在循環中運行它,這會使我脫離當前腳本」?你的意思是遠程SSH連接沒有結束? – nephtes

回答

1

我不確定這是你正在尋找的,但你可以在遠程機器上直接在ssh調用中執行check命令。返回值應該對應於在遠程機器中調用的命令的返回值。

當然,您需要啓用無密碼身份驗證方法(例如ssh密鑰)。

ssh otherMachine "ps cax | grep my_script.sh > /dev/null" 
if [ $? -eq 0 ] 
then 
    echo "Process is running." 
else 
    echo "Process is not running." 
fi 
0

這是一個簡單的解決方案來檢查程序是否正在運行或不在遠程位置。

ssh [email protected] -p 22 -t "pgrep -fl while.sh"

if [ $? -eq 0 ]; then echo "Process is running."; else echo "Process is not running."; fi