大家好,请教个linux shell脚本字符串比较问题

wang822ning 2014-12-01 02:15:32
最近在搞coreseek(一个搜索引擎,进程名为searchd),但是搜索到某些奇葩字符串时会自动启动很多进程且占很高的CPU,我打算写一个脚本每隔一分钟检测一次,是否启动了多个进程且都是些常驻进程(PS:检测是否常驻是因为正常使用下每个请求都是启动新进程去处理,所以有些短时间的进程是正常的而非出错),然后把这些因为出错而多出来的占CPU的常驻进程杀掉,思路是每次用pgrep searchd获取进程数量,然后进行数量判断,大于1则判断两秒后是否还是那几个进程(一般一次搜索请求不会大于2秒),但是不知道为什么两次获得进程号的结果匹配不上,代码如下:

#!/bin/sh
processcount=`ps -ef|grep searchd|grep -v grep|wc -l`
if [ $processcount -ne 1 ]; then

processno1=`pgrep searchd`
sleep 2
processno2=`pgrep searchd`
processcount=`ps -ef|grep searchd|grep -v grep|wc -l`
if [ $processno1 = $processno2 ]&&[ $processcount -gt 1 ]||[ $processcount -gt 5 ]; then
echo "[`date`]-processcount=$processcount"
echo "[`date`]-processno1=$processno1"
echo "[`date`]-processno2=$processno2"
pgrep searchd |while read line
do
echo "[`date`]-not running one:$line"
kill -9 $line
done
sleep 1
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/bin/csft2.conf

else

echo "[`date`]-nomal processes1 :"
echo -n
echo "[`date`]-$processno1"
echo "[`date`]-nomal processes2 :"
echo -n
echo "[`date`]-$processno2"

fi

else

echo "[`date`]-only one:`pgrep searchd`"

fi


即使出问题了,每次判断分支都是到nomal processes那里去,判断不出来 $processno1 = $processno2(明明$processno1 跟 $processno2是完全相等的),是不是因为这两个变量有多行的问题?是的话又应该怎么做??
求大神赐教,万分感激
...全文
372 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang822ning 2015-01-12
  • 打赏
  • 举报
回复
因为后来脚本删掉了, 一直没管这个事情所以没记起来论坛的帖子,实在抱歉
wang822ning 2015-01-12
  • 打赏
  • 举报
回复
谢谢各位热心的大神们,后来放弃了这种做法了,因为即使实现了在整套应用系统中也会有问题 问题应该是    processno1=`pgrep searchd` processno2=`pgrep searchd` 这里得出来processno1跟processno2是多行的,要逐行取出来匹配才行 后来一直忙忘了上论坛,谢谢大家!
光明矢 2014-12-03
  • 打赏
  • 举报
回复
pgrep 进程名 得到的可能是多行的输出。我写了类似结构的脚本,执行脚本提示参数太多。程序走了另一条路径
办法:可以另做比较并保存比较结果(函数),然后在条件判断的时候引用比较结果。
除此之外,脚本应该没有什么问题。不错~
----
为什么两次获得进程号的结果匹配不上?
processno1=`pgrep searchd`
sleep 2
processno2=`pgrep searchd`
每次搜索都会启动新进程,匹配不上是因为 本来就不是同一进程。
----
iasky 2014-12-03
  • 打赏
  • 举报
回复
sh -x来执行一下你的脚本,看信息分析。
ljc007 2014-12-02
  • 打赏
  • 举报
回复
把执行过程贴出来看看 bash -vx test.sh
spark_li 2014-12-01
  • 打赏
  • 举报
回复
$processno1 = $processno2 改为 $processno1 -eq $processno2 看看有用不?

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧