我需要从时间做到这一点时间,并最终黑客命令行,直到它的工作原理。
例如,在这里我想看看我是否有任何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