incron对新文件夹内的文件写入无响应 该如何修复?
问题原因
incron 本身无递归目录监控能力,你当前配置的规则仅作用于/root/var/这一级目录,子目录下的文件写入事件不会被触发。
修复方案
方案1:扩展incron规则实现动态递归监控
- 先批量添加现有子目录的监控规则,切换到root用户执行如下命令:
find /root/var/ -type d | xargs -I {} echo "{} IN_CLOSE_WRITE curl \"https://api.telegram.org/.......\"" >> /var/spool/incron/root
- 新增一条目录创建事件的监听规则,后续新建的子目录会自动加入监控:
/root/var/ IN_CREATE,IN_ISDIR echo "\$@/\$# IN_CLOSE_WRITE curl \"https://api.telegram.org/.......\"" >> /var/spool/incron/root && systemctl reload incron
- 所有规则修改完成后,执行
systemctl restart incron重启服务生效。
方案2:改用inotifywait实现递归监控
如果你不想维护多条incron规则,可以直接用inotifywait工具写个常驻后台的脚本,原生支持递归监听:
- 创建监控脚本
monitor.sh,内容如下:
#!/bin/bash # 未安装inotify-tools先执行对应安装命令 # Debian/Ubuntu: apt install inotify-tools -y # CentOS/RHEL: yum install inotify-tools -y inotifywait -mrq -e close_write /root/var/ | while read dir event file do # 替换为你自己的Telegram通知接口地址 curl "https://api.telegram.org/......." done
- 给脚本添加执行权限:
chmod +x monitor.sh - 后台运行脚本即可:
nohup ./monitor.sh &
注意事项
- 两种方案都需要确保运行身份有
/root/var/目录的读取权限,推荐用root用户配置运行。 - 如果配置后规则仍不生效,可以执行
tail -f /var/log/syslog(Debian/Ubuntu)或tail -f /var/log/messages(CentOS/RHEL)查看incron的运行日志排查问题。
内容的提问来源于stack exchange,提问作者accountnujen
相关产品推荐
相关产品推荐

