繁体   English   中英

用于检查进程的Shell脚本

[英]Shell Script for checking processes

我们的环境中大约有300台服务器(AIX,HP-UX,Suse Linux,RHEL,Solaris),这使得很难分别检查这些服务器中是否正在运行名为syslog的进程。

因此,我正在开发一个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 Laptop Terminal的$提示符。

   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'

为什么所有这些呢?

如果您安装了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指向此本地计算机,但是将localhost更改为远程主机,只要密码是公用的并且允许从我的主机进行snmp连接,那么这应该可以工作

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

最后,找到了一种在文本文件中提取过程的方法。 请参考下面的代码。

    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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM