我们在环境中有大约300台服务器(AIX,HP-UX,Suse Linux,RHEL,Solaris),这使得很难分别检查一个名为syslog的进程是否在这些服务器中运行。
因此,我正在开发一个shell脚本,该脚本应该从我的Linux开放客户端Lenovo Thinkpad以root身份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笔记本电脑终端的$ prompt。
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'
答案 0 :(得分:0)
为什么要这样做?
如果您安装了snmp - 使用SNMP查询所有远程主机而不使用任何SSH我会尝试帮助您并指出正确的方向:
snmpwalk -v2c -c public localhost 1.3.6.1.2|grep -i syslog
HOST-RESOURCES-MIB::hrSWRunName.1171 = STRING: "rsyslogd"
HOST-RESOURCES-MIB::hrSWRunPath.1171 = STRING: "/sbin/rsyslogd"
HOST-RESOURCES-MIB::hrSWRunParameters.1171 = STRING: "-i /var/run/syslogd.pid -c 5"
HOST-RESOURCES-MIB::hrSWRunParameters.15145 = STRING: "-i syslog"
HOST-RESOURCES-MIB::hrSWInstalledName.392 = STRING: "rsyslog-5.8.10-6.el6"
这些都是与这台机器上的snmp相关的东西
现在运行这一组特定的snmpwalk命令我可以将pid指向本地计算机,但是只要密码是公共的,并且允许来自我的主机的snmp连接,就可以将localhost更改为远程主机
snmpwalk -v2c -c public -Oq localhost HOST-RESOURCES-MIB::hrSWRunName|grep syslog
HOST-RESOURCES-MIB::hrSWRunName.1171 "rsyslogd"
snmpwalk -v2c -c public -Oq localhost HOST-RESOURCES-MIB::hrSWRunName|grep syslog|awk -F"hrSWRunName." '{print $2}'|awk -F" " '{print $1}'
1171
pid是1171
ps auwx|grep 1171
root 1171 0.0 0.0 249276 1820 ? Sl Nov20 0:03 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
答案 1 :(得分:0)
最后,找到了一种在文本文件中提取进程的方法。请参考下面的代码。
for i in `cat /tmp/serverlist`
do
echo $i:`ssh -l root $i "uname -n;ps -eo comm | grep -i syslog"` >> sysloginfo.txt
done
并且输出为
xx.xx.xx.xx: xxxxxxx101 syslogd
xx.xx.xx.xx: xxxxxxx102 syslog-ng
xx.xx.xx.xx: xxxxxxx103
xx.xx.xx.xx: xxxxxxx104 syslog-ng syslog-ng