我们在环境中有大约300台服务器(AIX,HP-UX,Suse Linux,RHEL,Solaris),这使得很难检查名为syslog的进程是否正在这些服务器上运行,单独。用于检查进程的Shell脚本
因此,我正在开发一个shell脚本,它应该以root身份从我的Linux开放客户端Lenovo Thinkpad中ssh执行并执行ps -ef
命令并将输出返回到文本文件中。
for i in `cat /tmp/serverlist |awk '{ print $1 }'`
do
ssh -l root $i `bash -x ./sysloginfo.sh` >>syslogdata.txt
done
和脚本文件sysloginfo.sh包含以下内容:
for i in `ps -ef |grep -i syslog |grep -v pts |grep -v super |awk '{ print $9 }'`
do
echo "`uname -n`" $i "\n"
done
现在,当我执行命令,它说对所有服务器逐个以下,并返回回我的$提示符我的Linux笔记本终端。
bash: xxxxxx.xxxx.com: command not found
++ ps -ef
++ grep -i syslog
++ grep -v pts
++ grep -v super
++ awk '{ print $9 }'
+ for i in '`ps -ef |grep -i syslog |grep -v pts |grep -v super |awk '\''{ print $9 }'\''`'
++ uname -n
+ echo oc7057073017.ibm.com -i '\n'
+ for i in '`ps -ef |grep -i syslog |grep -v pts |grep -v super |awk '\''{ print $9 }'\''`'
++ uname -n
+ echo xxxxxx.xxxx.com: --start '\n'
替换'用单引号的ssh -l root'反引号。 –
也从您的进程列表中过滤grep。 'ps -ef | | grep -ve grep' | awk'{print $ 9}'。您也可以使用-e将多个正则表达式传递给grep。 grep -ve pts -ve super -ie syslog。有些greps会将所有参数视为不区分大小写,而不管其中的-i落在哪里,所以如果它很重要,请将其分开。 –
JimR
300台服务器,这将是一个像[nagios.org](http://www.nagios.org)监控应用程序? – PeterMmm