服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-10-23 简米科技 4,006 字 10 分钟阅读

服务器脚本如何精准监控并安全杀掉异常进程?异常进程怎么监控清理

导读服务器脚本要精准监控并安全杀掉异常进程,核心思路是“先画像、再取证、分级处置”:用脚本持续采集进程特征建立基线,异常时先冻结验证再终止,避免误杀业务进程,这套方法既治标也治本,尤其适合网站服务器被挖矿、内存泄露、僵尸进程这类反复出现的场景,服务器进程监控脚本怎么写?先搞懂异常进程的三个特征很多运维新手问“服务器……

服务器脚本要精准监控并安全杀掉异常进程,核心思路是“先画像、再取证、分级处置”:用脚本持续采集进程特征建立基线,异常时先冻结验证再终止,避免误杀业务进程。这套方法既治标也治本,尤其适合网站服务器被挖矿、内存泄露、僵尸进程这类反复出现的场景。

服务器进程监控脚本怎么写?先搞懂异常进程的三个特征

很多运维新手问“服务器进程监控脚本怎么写”,其实脚本本身并不复杂,真正难的是判断标准,一个进程是否异常,不能只看CPU占用高,还得结合启动时间、命令行、父子关系、文件句柄等维度综合判断。

资源占用特征:CPU与内存只是敲门砖

多数异常进程会让CPU飙到多核满载,但正常业务在高并发时同样会吃满资源,所以脚本里不能只设一个绝对阈值,更聪明的做法是与历史基线对比,例如记录最近7天同一时段的平均CPU使用率,当前值超过基线两倍以上才触发告警。

内存方面需要留意持续增长型进程,正常服务的内存曲线会有波动,但不会只升不降,如果脚本监控到某个进程的RES内存连续5次采样都在增长,且每次增幅超过10%,基本可以判定为内存泄露或恶意程序。

行为特征:网络连接与文件操作是铁证

异常进程往往伴随可疑的外联行为,比如一个普通PHP进程突然向境外IP发起大量HTTPS连接,这就是挖矿木马的典型特征,脚本里可以用ss -tnp抓取进程的网络连接状态,再结合IP信誉库做匹配。

另一个隐蔽特征是对临时目录的写入。/tmp、/var/tmp、/dev/shm这些目录是恶意脚本的重灾区,如果监控脚本发现/tmp下新增了带随机后缀的可执行文件,并且文件名不在白名单内,几乎可以实锤。

身份特征:伪装进程的把戏骗不了脚本

常见伪装手法是把进程名改成[kworker]或systemd,但命令行参数会露馅,正常内核线程没有可执行文件路径,而伪装的进程能通过/proc/PID/exe查到一个真实路径,脚本在匹配异常时,优先检查进程的exe链接是否指向可执行文件,能过滤掉相当一批伪装者。

linux杀不掉进程怎么办?先冻结取证再动手

“linux杀不掉进程怎么办”这个搜索词背后,是很多人在kill -9之后发现进程又满血复活的困境,杀不掉的根源通常有两个:一是进程处于不可中断睡眠状态(D状态),二是存在守护进程自动拉起,脚本要解决的不只是“杀”这个动作,而是完整的处置闭环。

信号分级:从SIGTERM到SIGKILL中间还隔着取证步骤

行业共识认为,kill -9是最后手段,直接杀掉进程会导致文件锁残留、子进程变成孤儿,甚至数据库数据不一致,在脚本里我们建议分三步走:

  • 第一步,发送SIGTERM(kill -15),给进程3-5秒的优雅退出时间
  • 第二步,如果进程还活着,用gdb -p PID附加进去查看当前调用栈,确认是否卡在某个系统调用
  • 第三步,只有确认无法正常退出时,才执行kill -9,同时记录PID、命令行、启动时间到审计日志

这里有个容易被忽略的操作:杀掉进程前先cgroup隔离,用echo PID > /sys/fs/cgroup/cpu/xx/tasks把进程移入一个空cgroup,然后对其CPU配额设置为0,相当于“物理隔离”,观察几分钟,如果它不再产生新的网络连接,再执行kill -9,这样能最大程度防止恶意程序在被杀前触发反制逻辑。

防重启机制:连守护进程一起处理

为什么杀了又活?因为背后有个supervisor或者crontab在按秒拉起,脚本必须做三件事:

  1. 查看/proc/PID/cmdline,提取可执行文件的绝对路径
  2. 删除或注释掉该路径对应的crontab条目(crontab -l | grep -E "路径|PID名称")
  3. 检查/etc/systemd/system下是否有对应的service文件,有就执行systemctl mask屏蔽

这三步做完,即使主进程被杀,也不会再被拉起,业内专家指出,实际运维中大约七成的“杀不掉”案例,都源于忽略了守护进程。

网站服务器被挖矿怎么办?异常进程自动清理工具哪个好?

网站服务器被挖矿的情况这两年特别常见,表现就是CPU莫名100%、访问网站卡顿、云平台发来对外攻击告警,如果你正在纠结“异常进程自动清理工具哪个好”,先别急着下载第三方安全软件开源工具+自写脚本的组合通常更可控。

免费工具筛查:BusyBox vs. TopVSZ

Linux平台上常见的进程排查工具有top、htop、atop,它们适合人工交互排查,但不适合无人值守监控,真正适合脚本调用的还是ps和pidstat,下面表格对比了三类工具的适用场景:

工具类型 代表工具 脚本自动化难度 适合场景
交互式监控 htop, atop 低,需解析文本输出 人工登录排查
命令行工具 ps, pidstat, ss, lsof 高,易嵌入脚本 定时巡检与告警
商业安全代理 云安全agent 中,API接口不统一 有预算且需合规审计

商业agent当然省心,但它会把进程数据上传到厂商服务器,某些对隐私敏感的行业未必愿意接受,自写脚本虽然要维护,但规则完全由自己控制,误判时可以直接改判断逻辑,不用等厂商更新策略。

实战:一个能自动处置的挖矿检测脚本框架

下面这个框架可以直接套用,用bash或Python都行:

采集:`ps -eo pid,ppid,comm,etime,pcpu,pmem,args --sort=-pcpu`取前20个进程
2. 取证:对每个高CPU进程,检查`/proc/PID/exe`真实路径、`/proc/PID/cwd`工作目录、`/proc/PID/fd`打开的文件描述符
3. 比对:硬件特征白名单(如系统自带的java、nginx、mysql路径固定) + 动态特征黑名单(如矿池地址、可疑域名、随机字符串参数)
4. 隔离:匹配黑名单后先把进程迁入cgroup并限制CPU为0,记录完整上下文
5. 杀灭:网络连接数降为0后,执行`kill -9`,同时清理启动残留文件
6. 恢复:删除可疑文件、修复crontab和systemd服务,最后把本次事件写入日志

写这个脚本的时候有个关键坑:千万不要用pkill -f配合模糊匹配来杀进程,比如你搜“php”关键字,可能把正常的php-fpm主进程也杀了,导致整个Web服务崩溃,精准的做法是先获取PID列表,逐个验证后再杀。

服务器安全巡检脚本的日常维护与误判兜底

脚本上线不是终点,后续的误判处理才是大头,凭心而论,任何静态规则都有漏洞,所以你需要给监控脚本设计一个熔断机制。

误判保护:白名单自动学习与人工审核队列

在脚本中维护一个/etc/secure_whitelist文件,格式为“进程名|启动参数|首次发现时间”,当脚本发现某个不在名单中的新进程CPU占用高于阈值时,不直接杀,而是:

  • 先把进程信息写入审核队列
  • 通过mail或webhook通知运维人员
  • 同时用strace -p PID -e trace=network跟踪它5秒,把发包目标记录下来

如果连续观察3个周期(每个周期5分钟)都没有异常外联,脚本自动将进程加入白名单,这种“怀疑-观察-确认”的流程,能把误杀率降到很低的水平。

日志审计:每次杀进程都留下可追溯的证据

安全处置最怕“杀完就完了,事后扯皮”,脚本在执行kill之前,必须把下面这些信息写入JSON格式日志,存到/var/log/process_killer/:

  • 触发规则类型(CPU超限/内存持续增长/挖矿特征/伪装进程)
  • 进程的完整命令行
  • 父进程PID与名称
  • 相关文件的MD5哈希值
  • 杀进程前后的网络连接快照

这些日志在日常巡检中可能用不上,但当服务器的CPU告警被怀疑是误杀时,能快速定位到是哪个业务在哪个时间点触发了规则,避免背锅。

q1:服务器进程监控脚本如何避免误杀正常服务?

最有效的方式结合白名单、行为观察和手动确认,脚本先比对已知服务路径与文件名,不在白名单内的新进程先进入观察模式,不执行杀操作,同时对触发条件的进程记录连续几个采样周期的变化趋势,如果CPU虽然高但网络连接正常,且进程启动时间早于本次异常告警时间,大概率是业务流量突增,脚本只告警不动作。

q2:异常进程清理脚本能用systemd定时执行吗?

可以,推荐用systemd timer而非crontab,在/etc/systemd/system/下新建process-watch.service和process-watch.timer,定义每5分钟执行一次即可,注意脚本执行时间不要超过一个周期,如果strace或gdb附加到目标进程导致卡住,需要用timeout命令限制整体运行时间,另外脚本内部需要加锁文件,防止上一个周期还没跑完下一个又启动。

q3:监控脚本本身的进程会被恶意程序杀掉吗?

存在这种可能,恶意程序发现被监控后主动kill掉监控进程,对策有二,一是把脚本改成只读方式运行,挂载为只读文件系统让恶意程序无法修改;二是采用双进程互相守护,分别在两个cgroup中运行,一旦一方死亡另一方立即拉起并发送告警,更稳妥的方式是用auditd监控脚本文件自身的完整性,当脚本二进制或哈希发生外部修改时立即触发内核级告警。

服务器脚本的终极价值不在于能杀多少个进程,而是让每一次处置都有理有据、有迹可循,先建立基线再谈异常,先取证隔离再谈终止,把误判风险降到最低,这才是“精准监控”和“安全杀掉”的真正含义。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱