如果我没有正确地搜索每一个可能的帖子,我道歉,但所有看起来都有点不同,我开始越过眼睛看着这个。
以下bash代码是我到目前为止所拥有的。
for server in `cat serverlist2.txt`; do ssh -q $server
if ! ps -ef | grep -q http ; then
echo $server
fi
done
我是bash脚本的新手,我必须找到运行apache(http)的文件serverlist2.txt中列出的所有主机,然后打印找到http的主机名。任何帮助将不胜感激。
2013年9月29日更新
for server in `cat serverlist2.txt`; do
ssh -q $server "ps -ef | grep http |grep -v grep && echo $server | wc -l"
done
以上更改,这是输出。
bash-3.00# bash serverlist.sh
resin 9900 612 0 Jul 30 ? 0:00 perl /usr/local/resin-pro-3.0.25/bin/wrapper.pl -chdir -name httpd -class com.c 1
resin 18053 641 0 Jul 30 ? 0:00 perl /usr/local/resin-pro-3.0.25/bin/wrapper.pl -chdir -name httpd -class com.c 1
resin 1768 589 0 Apr 10 ? 0:00 perl /var/resin/wss-stg/bin/wrapper.pl -chdir -name httpd -class com.caucho.ser 1
resin 8568 13119 0 Sep 23 ? 0:00 perl /usr/local/resin-pro-3.0.25/bin/wrapper.pl -chdir -name httpd -class com.c 1
resin 1062 776 0 Sep 16 ? 0:00 perl /usr/local/resin-pro-3.0.25/bin/wrapper.pl -chdir -name httpd -class com.c 1
resin 3539 8290 0 Jul 13 ? 0:00 perl /usr/local/resin-pro-3.0.25/bin/wrapper.pl -chdir -name httpd -class com.c 1
resin 29900 3391 0 Sep 23 ? 0:00 perl /var/resin/wss-prod/bin/wrapper.pl -chdir -name httpd -class com.caucho.se 1
resin 21323 8547 0 Sep 23 ? 0:00 perl /var/resin/wss-prod/bin/wrapper.pl -chdir -name httpd -class com.caucho.se 1
bash-3.00#
答案 0 :(得分:1)
我想你想做这样的事情:
while read server; do
ssh -q $server "ps -ef | grep http | grep -v grep >/dev/null && echo $server"
done < serverlist2.txt
即,对于列表中的每个服务器:
ps -ef
grep http
行,但不打印任何内容那说......对“http”的进程列表进行点击不是很准确,你可能会得到误报。更好的解决方案是使用某种状态命令。例如,在Debian系统中,您可以像这样检查apache2
的状态:
service apache2 status
如果服务器正在运行,这将退出0(=成功),如果未运行,则退出1(=失败)。使用此脚本变为:
while read server; do
ssh -q $server "service apache2 && echo $server"
done < serverlist2.txt
如果你有混合系统,一些Debian,一些RedHat,一些Solaris等,那么检查状态的方法可能因服务器而异。您可以通过创建脚本来解决这个问题,让我们称之为具有智能的httpstatus.sh
来确定它运行的系统类型(例如,基于uname
),并充当公共包装器,如果Web服务器正在运行,则退出0;如果未运行,则退出1。然后脚本变为:
while read server; do
ssh -q $server "httpstatus.sh && echo $server"
done < serverlist2.txt