我需要從時間做到這一點時間,並最終黑客命令行,直到它的工作原理。
例如,在這裏我想看看我是否有任何SSH連接(由「PS」返回第八欄是運行「路徑到PROCNAME」,並通過「AWK」過濾:
ps | awk -e '{ print $8 }' | grep ssh | sed -e 's/.*\///g'
然後我把它放在一個外殼腳本,(「EVAL」 -ing反引號內的命令行),這樣的:
#!/bin/bash
VNC_STRING=`ps | awk -e '{ print $8 }' | grep vnc | sed -e 's/.*\///g'`
if [ ! -z "$VNC_STRING" ]; then
echo "The VNC STRING is not empty, therefore your process is running."
fi
的「sed的」部分修剪的確切令牌的路徑和可能並不需要您的需求。
這是我用來獲得答案的示例。我寫它自動創建2個SSH隧道併爲每個客戶端啓動一個VNC客戶端。我也可以用一個命令跳到UNIX/LINUX-land(這也假定客戶端的rsa鍵已經是「ssh-key」), copy-id「-ed並且對遠程主機是已知的)。
它的冪等性在於每個proc /命令僅在其$ VAR eval爲空字符串時觸發。
它附加「| wc -l」來存儲匹配的正在運行的proc的數量(即找到的行數),而不是每個$ VAR的proc-name以滿足我的需要。我保留「回聲」語句,以便我可以重新運行並診斷兩個連接的狀態。
#!/bin/bash
SSH_COUNT=`eval ps | awk -e '{ print $8 }' | grep ssh | sed -e 's/.*\///g' | wc -l`
VNC_COUNT=`eval ps | awk -e '{ print $8 }' | grep vnc | sed -e 's/.*\///g' | wc -l`
if [ $SSH_COUNT = "2" ]; then
echo "There are already 2 SSH tunnels."
elif [ $SSH_COUNT = "1" ]; then
echo "There is only 1 SSH tunnel."
elif [ $SSH_COUNT = "0" ]; then
echo "connecting 2 SSH tunnels."
ssh -L 5901:localhost:5901 -f -l USER1 HOST1 sleep 10;
ssh -L 5904:localhost:5904 -f -l USER2 HOST2 sleep 10;
fi
if [ $VNC_COUNT = "2" ]; then
echo "There are already 2 VNC sessions."
elif [ $VNC_COUNT = "1" ]; then
echo "There is only 1 VNC session."
elif [ $VNC_COUNT = "0" ]; then
echo "launching 2 vnc sessions."
vncviewer.exe localhost:1 &
vncviewer.exe localhost:4 &
fi
這對我來說很像perl-like,可能比真正的shell腳本更多的是unix utils。我知道有很多「MAGIC」數字和cheezy硬編碼的價值,但它的工作原理,(我認爲我也使用這麼多大寫字母的口味不佳)。靈活性可以添加一些CMD線參數,使這更多功能,但我想分享什麼對我有用。請改善和分享。乾杯。
檢查過程是否存在的最佳方法:http:// stackoverflow。com/questions/3043978/how-to-check-if-a-process-id-pid-exists – 2016-06-07 15:43:48
你能否檢查一下,看看你是否從grep命令獲得非空輸出而不是依賴返回值? – 2010-05-25 09:22:17
我試過這個,並有類似的問題。輸出不被考慮在內。下面的代碼: #/斌/慶典 SERVICE = $ 1 OUTPUT = $(PS -a | grep的-v grep的| grep的$ 1) 回聲$ OUTPUT 如果[ 「$ {#OUTPUT}」 - gt 0];然後 echo「'date':$ SERVICE service running,everything is fine」 else echo「'date':$ SERVICE is not running」 fi – elasticsecurity 2010-05-25 09:44:13