项目需要收集服务器一些进程,计划任务和软件版本信息。下面为相应的SHELL代码,仅供参考。#!/bin/bashsource /etc/profilesource ~/.bash_profile#部署路径path="/usr/local/japp"portfile="port.txt"versionfile="version.txt"processfile="process.txt"cronfile="task.txt"#重复执行先清空上次结果cat /dev/null > $path/$portfilecat /dev/null > $path/$versionfilecat /dev/null > $path/$cronfile#建立文件索引updatedb#收集进程信息ps -eo pid,user,size,vsize,nice,stat,pcpu,pmem,fname > $path/$processfileLANG=C sed -i '1,1d' $path/$processfile#收集端口号和进程信息netstat -lnptuw|grep -v grep>$path/netstat_status.txtLANG=C sed -i '1,2d' $path/netstat_status.txtcat $path/netstat_status.txt|awk -F " " '{print $1 " " $4 " " $6 " " $7}'>$path/port_pid.txt#echo "protocol,port,process_id,command_name,exe_location"while read linedo  protocol=`echo $line |awk -F " " '{print $1}'`  port=`echo $line |awk -F " " '{print $2}'|awk -F ":" '{print $NF}'`if [ $protocol = "udp" ];then server_pid=`echo $line |awk -F " " '{print $3}'|awk -F "/" '{print $1}'` command_name=`echo $line |awk -F " " '{print $3}'|awk -F "/" '{print $NF}'`else server_pid=`echo $line |awk -F " " '{print $4}'|awk -F "/" '{print $1}'` command_name=`echo $line |awk -F " " '{print $4}'|awk -F "/" '{print $NF}'`fi exe_location=`ls -la /proc/$server_pid|grep "exe ->"|grep -v grep|awk '{print $NF}'` echo $protocol,$port,$server_pid,$command_name,$exe_location >> $path/$portfiledonerm -rf $path/netstat_status.txtrm -rf $path/port_pid.txt#收集crontab任务信息ls -1 /var/spool/cron > $path/tmp.txtwhile read linedocat /var/spool/cron/$line|grep -v "SHELL" >> $path/$cronfiledone#收集版本信息#redisredis_path=$(ps -ef | grep -v grep | grep redis | awk '{print $8}')if [ A$redis_path != A ];then$(whereis $redis_path|awk -F " " '{print $2}') -v|awk '{print $1 " " $3}' > $path/tmp.txtLANG=C sed -i 's/v=//g' $path/tmp.txtredisver=$(cat $path/tmp.txt) echo "$redisver $redis_path" >> $path/$versionfilefi#nginxnginx_path=$(ps -ef|grep -v grep | grep -E  'master.*nginx'|awk '{print $11}') nginx_info=$($nginx_path -v 2>&1)echo $nginx_info > $path/tmp.txtif [ A$nginx_path != A ];thennginx_version=$(cat $path/tmp.txt|awk -F " " '{print $3}'|awk -F "/" '{print $2}')nginx_name="Nginx "if [ A$nginx_version != A ];thenecho "$nginx_name$nginx_version $nginx_path" >> $path/$versionfilefifi#tomcatps -ef|grep tomcat|grep -v grep|awk '{print $2}'|xargs pwdx | awk '{print $2}'|uniq > $path/tmp.txttomcat_path=$(ps -ef |grep tomcat|grep -v grep | awk '{print $2}'|xargs pwdx|awk '{print $2}'|head -1)if [ A$tomcat_path != A ];thenwhile read linedotomcat_version=$(cd $line && sh version.sh|awk '/Server version/{gsub("/"," ",$4);print$4}')if [ A"$tomcat_version" != A ];thenecho "$tomcat_version $line" >> $path/$versionfilefidonefi#wasps -ef|grep -i 'WebSphere'|grep -v grep|awk '{print $2}'|xargs pwdx > /dev/null 2>&1if [ "$?" = 0 ];thenwas_path=$(locate SystemOut.log|head -1)if [ A$was_path != A ];thenwasver=$(cat $was_path |grep "WebSphere Platform"|awk -F " " '{print $1 " " $5}'|head -1)waspath=$(locate SystemOut.log|head -1|awk -F "/" '{print "/"$2"/"$3"/"$4"/"$5"/"$6}')echo $wasver $waspath >> $path/$versionfilefifi#weblogicps -ef|grep startNodeManager|grep -v grep|awk '{print $2}'|xargs pwdx > /dev/null 2>&1if [ "$?" = 0 ];thenweblogic_path=$(locate -r "/\registry.xml"|head -1)if [ A$weblogic_path != A ];thencat $weblogic_path |grep -E 'WebLogic Server.*version'|awk -F "\"" '{print $2$4 " " $6}' > $path/tmp.txtLANG=C sed -i 's/Server//g' $path/tmp.txtcat $path/tmp.txt >> $path/$versionfilefifi#apacheps -ef | grep -E 'apache.*httpd'| grep -v grep|awk '{print $2}'|xargs pwdx > /dev/null 2>&1if [ "$?" = 0 ];thenapache_path=$(locate -r "/\apachectl"|grep bin|head -1)if [ A$apache_path != A ];thenapaver=$($apache_path -v|head -1|awk -F " " '{print $3}'|awk -F "/" '{print $1 " " $2}')if [ A"$apaver" != A ];thenecho "$apaver $apache_path">> $path/$versionfilefififi#vsftpvsftp_path=$(ps -ef|grep vsftp|grep -v grep|awk '{print $8}')if [ A$vsftp_path != A ];thenstrings $vsftp_path|awk '/vsftpd: version/{gsub(": version","",$0);print$0}' >> $path/$versionfilefi#opensshssh_path=$(ps -ef | grep '/sshd'|grep -v grep|awk '{print $8}')$ssh_path -V &>$path/tmp.txtcat $path/tmp.txt | sed -n '2p' |awk -F "," '{print $1}'|awk -F "_" '{print $1 " " $2}' >> $path/$versionfile#opensslopenssl version >$path/tmp.txtcat $path/tmp.txt|awk -F " " '{print $1 " " $2}' >>  $path/$versionfile#mysqlmysql_sbin=$(ps -ef|grep mysqld|grep -v mysqld_safe|grep -v grep|awk '{print $8}')mysql_pid=$(ps -ef|grep mysqld|grep -v mysqld_safe|grep -v grep|awk '{print $2}')if [ A$mysql_sbin != A ];thenmysqlver=$($mysql_sbin -V|awk '{print "mysql"" "$3}') mysqlpath=$(pwdx $mysql_pid|awk '{print $2}')if [ A"$mysqlver" != A ];thenecho "$mysqlver $mysqlpath" >>  $path/$versionfilefifi#JDKps -ef|grep jdk|grep -v grep|awk '{print $8}'|uniq > $path/tmp.txtjdk_path=$(ps -ef|grep jdk|grep -v grep|awk '{print $8}'|head -1)if [ A$jdk_path != A ];then while read line do $line -version 2>&1 |less > $path/jdktmp.txt jdk_ver=$(cat $path/jdktmp.txt |awk -F "\"" '/java version/{print $2}') echo "$jdk_ver $line" >> $path/jdkverpathtmp.txt echo "$jdk_ver" >> $path/jdkvertmp.txt done sort -k2n $path/jdkvertmp.txt | awk '{if ($0!=line) print;line=$0}' >> $path/jdkvertmp2.txt while read line2 do       cat $path/jdkverpathtmp.txt|grep -w $line2 |awk '{print $2}'>$path/path.txt       path2=$(cat $path/path.txt |xargs | sed 's/ /,/g')       echo "JDK $line2 $path2" >> $path/$versionfile donefirm -rf $path/jdkvertmp2.txtrm -rf $path/jdkvertmp.txtrm -rf $path/jdkverpathtmp.txtrm -rf $path/jdktmp.txtrm -rf $path/tmp.txtrm -rf $path/path.txtunset line2unset lineunset path2#Struts2locate jar|grep struts2|grep -o "[0-9]\{1\}\.[0-9]\{1,2\}\.[0-9]\{1,2\}\.[0-9]\{1,2\}"|sort -k2n|awk '{if ($0!=line) print;line=$0}' > $path/tmp.txtcontent=$(cat $path/tmp.txt |head -1)if [ A$content != A ];then while read line do     #输出匹配版本号的jar路径  locate jar|grep struts|grep -w $line >> $path/path.txt     #截取到lib的路径 while read line2 do echo  ${line2%/*} >> $path/path2.txt done #去除重复 cat $path/path2.txt |sort -k2n|awk '{if ($0!=line2) print;line2=$0}' > $path/path3.txt     #合并成一行 path2=$(cat $path/path3.txt |xargs | sed 's/ /,/g') #输出版本和路径 echo "Struts2 $line $path2" >> $path/$versionfile donefirm -rf $path/path2.txtrm -rf $path/path3.txtrm -rf $path/path.txtunset line2unset lineunset path2#Springlocate -r "spring-web.*.jar$"|grep -o "[s][p][r][i][n][g].*"|grep -o "[0-9]\{1\}\.[0-9]\{1,2\}\.[0-9]\{1,2\}"|sort -k2n|awk '{if ($0!=line) print;line=$0}' > $path/tmp.txtcontent=$(cat $path/tmp.txt |head -1)if [ A$content != A ];then while read line do      #输出匹配版本号的jar路径  locate -r "spring-web.*.jar$" |grep -w $line >> $path/path.txt      #截取到lib的路径 while read line2 do echo  ${line2%/*} >> $path/path2.txt done #去除重复 cat $path/path2.txt |sort -k2n|awk '{if ($0!=line2) print;line2=$0}' > $path/path3.txt      #合并成一行 path2=$(cat $path/path3.txt |xargs | sed 's/ /,/g') #输出版本和路径 echo "Spring $line $path2" >> $path/$versionfile donefirm -rf $path/path2.txtrm -rf $path/path3.txtrm -rf $path/path.txt##rm -rf $path/tmp.txt
02-02 18:01