如何编写脚本调用nagios-contacts.sh遍历对应目录下所有配对文件
批量调用nagios-contacts.sh处理所有对应Nagios配置文件的解决方案
Hey there, let's sort out how to batch process all your Nagios host and service config files using the script you already wrote. Here's a straightforward wrapper script that will loop through every .cfg file in your hosts directory and call nagios-contacts.sh for each matching pair in the services directory:
#!/bin/bash # 定义目录路径,后续修改更方便 HOSTS_DIR="/usr/local/nagios/etc/hosts" SERVICES_DIR="/usr/local/nagios/etc/services" # 遍历hosts目录下所有.cfg配置文件 for host_cfg in "$HOSTS_DIR"/*.cfg; do # 提取纯文件名(去掉路径部分) cfg_filename=$(basename "$host_cfg") # 拼接services目录下的对应文件路径 service_cfg="$SERVICES_DIR/$cfg_filename" # 先检查services目录下是否存在对应文件(可选步骤,按需保留) if [ -f "$service_cfg" ]; then # 调用你的处理脚本,传入两个文件路径 ./nagios-contacts.sh "$host_cfg" "$service_cfg" # 输出处理日志,方便追踪进度 echo "Successfully processed: $host_cfg → $service_cfg" else # 如果对应文件不存在,输出警告信息 echo "Warning: No matching service config found for $host_cfg, skipping..." fi done
关键细节说明:
- 目录变量定义:把两个目录路径做成变量,以后如果目录结构变动,只需要修改这两行即可,不用动整个循环逻辑。
- 安全遍历文件:用双引号包裹路径变量,避免遇到文件名含空格或特殊字符时出现错误。
- 文件存在检查:这个判断是可选的——如果你的services目录下肯定有每个hosts文件的对应副本,可以直接去掉
if判断,直接执行处理脚本。 - 日志输出:添加
echo语句能让你清楚看到哪些文件已经处理,方便排查问题。
使用步骤:
- 将上述代码保存为
batch-nagios-contacts.sh - 给脚本添加执行权限:
chmod +x batch-nagios-contacts.sh - 运行脚本:
./batch-nagios-contacts.sh
注意:如果你的
nagios-contacts.sh不在当前工作目录,记得把调用它的路径改成绝对路径(比如/home/youruser/scripts/nagios-contacts.sh)。
内容的提问来源于stack exchange,提问作者MarkG
相关产品推荐
相关产品推荐

