如果某些應用程序在某些遠程計算機上運行,我正在嘗試「ping」。ssh + ksh + grep + wc
要做到這一點我有服務器和應用程序文件,如:
server1:application1
server2:application1
server3:application2
Etc.
我希望獲得的這個名字是在服務器上運行的應用程序數量。
連接並檢查我需要一個SSH連接。
我的腳本是bash和是這樣的:
Ping_Applications() {
SetParam
cat $APPFILE | while read next
do
server=`echo $next | cut -d : -f1`
app=`echo $next | awk -F":" '{print $2}'`
commando="/bin/ssh $server '/bin/ps -fea | /bin/grep $app | /bin/grep -v grep | /bin/wc -l'"
eval COMA=\$\($commando\)
echo $commando
if [ $COMA != 0 ]
then
echo -e "$TIME : Application $app of on server $server is \E[32m[ RUNNING ]\E[0m";
else
echo -e "$TIME : Application $app of on server $server is \E[31m[ NOT RUNNING ]\E[0m";
fi
done;
}
我的問題是,當我送
ssh $server 'ps -fea | grep $app | grep -v grep | wc -l'
這將返回的數量,但是當通過使用腳本發送,我沒有回答,因爲(我認爲)管道打開一個新的外殼。
我不知道如何解決這個問題。
有什麼想法?
感謝
路易斯
歡迎使用stackoverflow。在突出顯示的代碼/數據/錯誤信息中,使用編輯框左上角的「{}」工具來保持正確的格式。祝你好運! – shellter
是不是有一個原因,你不是直接運行命令,而是將它放入字符串'eval'?此外,不相關,但你可以嘗試使用'pgrep'而不是'ps'和2'grep' –