You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux Csh守护进程检测脚本误报问题咨询

守护进程检测脚本误报问题

我编写了如下用于检测守护进程的Csh脚本:

#!/bin/csh

while(1)
ps | grep -v "PID" | head -1 > /export/home/system/system/tmp/ppp
set pts = `awk -f: '{print $2}' /export/home/system/system/tmp/ppp`
echo $pts[1] > /export/home/system/system/tmp/ppp1
set ww = `cut -c5-6 /export/home/system/system/qtmp/ppp1`
clear

@ a = 0
echo "############################ "
echo " <  C3svr2 Quick-Check  >  "
echo "############################ "
echo " < Application count = 46 , Modify DATE = 2023.09.14 >  "
echo "------------------------------------------------------------------ "
echo " 9700/8700/7700/9300/8300 "
echo " 7300/gwchopan/ex_txt2chulpand/yunmon/m_embargod "
echo " rtf2chulgod/ex_xml2archived/newsis_con/newsis_rcv/newsis_reg "
echo " bloom_reg/get_bloom/pdf_rcv/ynewsml_reg/ex_jdistd.ns "
echo " ex_jdistd.ww/youtubed/smartx/logmond/snd_dotcom "
echo " im_photod/im_myphotod/img2chopan/im_dbd/im_sportsd "
echo " im_onlinephotod/im_arcphotod/im_newsisd/im_news1d/im_ftpd "
echo " im_getpicd/im_yond/ex_image2biz/ex_img2archived/get_pool "
echo " im_poold/tomcat/nmbd/smbd/sp1agentd/sp1mon "
echo " ----------------------------------------------------------------- "

ps -ef|grep nccs > /export/home/system/system/qtmp/qtmp.$ww
        foreach DDD( 9700 8700 7700 9300 8300 7300 gwchopan ex_txt2chulpand yunmon m_embargod rtf2chulgod ex_xml2archived newsis_con newsis_rcv newsis_reg bloom_reg get_bloom pdf_rcv ynewsml_reg ex_jdistd.ns ex_jdistd.ww youtubed smartx logmond snd_dotcom im_photod im_myphotod img2chopan im_dbd im_sportsd im_onlinephotod im_arcphotod im_newsisd im_news1d im_ftpd im_getpicd im_yond ex_image2biz ex_img2archived get_pool im_poold tomcat )
       cat /export/home/system/system/qtmp/qtmp.$ww | grep -w $DDD > /export/home/system/system/qtmp/qtmp1.$ww
      if ( $status == 1 ) then
           cat /export/home/system/system/qtmp/qtmp1.$ww | grep -v $DDD
           echo -n "$DDD""(Down)"
      else
           echo -n "! "
           @ a++
      sleep 0.3
      endif
      end

ps -ef|grep mbd > /export/home/system/system/qtmp1/qtmp.$ww

foreach DDD(nmbd smbd)

cat /export/home/system/system/qtmp1/qtmp.$ww | grep -w $DDD > /export/home/system/system/qtmp1/qtmp1.$ww

      if ( $status == 1 ) then
          cat /export/home/system/system/qtmp1/qtmp1.$ww | grep -v $DDD
           echo -n "$DDD""(Down)"
      else
           echo -n "! "
           @ a++
      sleep 0.3
      endif
      end

ps -ef|grep siem > /export/home/system/system/qtmp2/qtmp.$ww

foreach DDD(sp1agentd sp1mon)

cat /export/home/system/system/qtmp2/qtmp.$ww | grep -w $DDD > /export/home/system/system/qtmp2/qtmp1.$ww

      if ( $status == 1 ) then
        cat /export/home/system/system/qtmp2/qtmp1.$ww | grep -v $DDD
        echo -n "$DDD""(Down)"
      else
           echo -n "! "
           @ a++
      sleep 0.3
      endif
      end
echo " "
sleep 3
end

但在多台PC上运行该脚本时,有时会误报正常运行的守护进程已停止,请问出现这种情况的原因是什么?


误报原因分析

1. 临时文件路径错误导致依赖失效

脚本开头生成/export/home/system/system/tmp/ppp1,但后续获取ww变量时却读取/export/home/system/system/qtmp/ppp1——路径中的tmp被错误替换为qtmp,引发两种问题:

  • 若qtmp/ppp1不存在,cut命令执行失败,ww变量为空,后续生成的临时文件(如qtmp/qtmp.)名称异常,最终grep无法匹配到进程;
  • 若qtmp/ppp1是历史残留文件,ww值不更新,会读取过期的进程快照,导致判断错误。

2. 进程前置过滤逻辑存在漏洞

脚本先用ps -ef|grep nccs、ps -ef|grep mbd等命令过滤进程列表,再在子循环中匹配守护进程名:

  • 若目标守护进程的命令行中不包含nccs/mbd/siem这些关键词,即便进程正常运行,也不会被写入临时文件,后续grep $DDD自然匹配不到,直接误报“Down”;
  • 例如tomcat进程如果命令行里没有nccs,就会被排除在第一次过滤的结果之外,导致误判。

3. $status变量的时效性与匹配逻辑问题

子循环中$status保存的是上一条命令的退出状态,但存在两个隐患:

  • 如果临时文件写入失败(如权限不足、磁盘空间满),$status会返回1,此时即便进程存在,也会误报;
  • grep -w要求完全匹配单词,但如果进程名在命令行中是参数的一部分(比如run_9700.sh),-w可能匹配不到,导致误判进程未运行。

4. 临时文件未清理引发循环冲突

脚本在无限循环中生成临时文件(如qtmp.$ww),但没有清理旧文件的逻辑:

  • 当ww变量重复时,新生成的临时文件会覆盖旧文件,若覆盖过程被循环中的其他操作打断,可能导致文件内容不完整;
  • 不同机器或同一机器多轮循环中ww值重复,都可能读取到不完整的进程列表。

5. 进程快照的时间差问题

脚本先一次性生成进程快照,再逐个匹配:

  • 如果在生成快照之后、匹配之前,目标进程恰好重启,快照里没有新进程的信息,就会误报进程已停止;
  • 尤其是守护进程可能短暂重启,这种时间差会直接导致误判。

内容的提问来源于stack exchange,提问作者kang12542

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:37:02