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

导入函数执行失败排查:/usr/local/bin下攻击拦截脚本异常

解决notify_about_attack.sh中ban_ip函数未执行的问题

首先看你的问题:执行notify_about_attack.sh时,ban_ip()函数里的第一条日志语句都没输出,说明函数压根没被调用到。最可能的原因是相对路径导致的脚本加载失败,咱们一步步排查解决:

1. 修复handle_attack.sh的加载路径

你的notify_about_attack.sh里用了source ./handle_attack.sh,但执行这个脚本时,当前工作目录不一定是/usr/local/bin(比如通过定时任务、其他脚本调用时),这会导致找不到handle_attack.sh。虽然你加了“加载成功”的日志,但source失败默认不会终止脚本,后续调用ban_ip时会因为函数未定义直接报错退出,自然不会执行函数里的内容。

把相对路径改成绝对路径,同时添加失败判断:

# 替换notify_about_attack.sh里的source语句
source /usr/local/bin/handle_attack.sh || { echo "加载handle_attack.sh失败,错误码:$?" >> /tmp/ban.log; exit 1; }

这样如果加载失败,会明确记录日志,方便后续排查。

2. 同步修复handle_attack.sh里的配置文件路径

同样,handle_attack.sh里的source ./stae.conf也存在相对路径问题,改成绝对路径避免找不到配置文件:

# 替换handle_attack.sh里的source语句
source /usr/local/bin/stae.conf

3. 检查脚本权限与执行环境

  • 确保handle_attack.sh和stae.conf对执行notify_about_attack.sh的用户有读权限(source不需要执行权限,但需要读权限):
    chmod 644 /usr/local/bin/handle_attack.sh /usr/local/bin/stae.conf
    
  • 如果是通过系统服务或定时任务执行,确认执行用户的环境能找到bash和expect,或者在脚本开头指定绝对解释器路径:
    # notify_about_attack.sh和handle_attack.sh开头添加
    #!/usr/bin/env bash
    

4. 额外优化:修复stae_baned_ip.exp里的日志命令

顺便提一下,stae_baned_ip.exp里的echo命令在Expect环境下不能直接使用,要改成exec echo才能调用系统的echo命令写入日志:

exec echo "${user} ${host} ${password} ${timeout} ${baned_ip}" >> /tmp/ban.log

做完这些修改后,重新执行notify_about_attack.sh,应该能看到ban_ip函数里的日志输出了。如果还是有问题,可以查看/tmp/ban.log里的错误信息,或者在notify_about_attack.sh开头添加set -x开启调试模式,追踪每一步执行情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:53:20