实战`inotify` 和 `systemd.path` | 文件变化时触发操作

inotifysystemd.path都能做到"文件变化时触发操作"。


方案一:inotify 工具(轻量级脚本方式)

1. 安装工具

bash 复制代码
sudo apt install inotify-tools   # Debian/Ubuntu
sudo yum install inotify-tools   # RHEL/CentOS

2. 写一个监控脚本

比如:监控 /tmp/test.txt,如果文件变化,就自动执行脚本

bash 复制代码
#!/bin/bash

FILE="/tmp/test.txt"

inotifywait -m -e modify "$FILE" | while read path action file; do
    echo "$(date): $FILE was modified, action=$action" >> /tmp/filewatch.log
    # 这里可以执行任意操作,比如重启服务
    # systemctl restart myapp.service
done

保存为 watch_file.sh,加执行权限:

bash 复制代码
chmod +x watch_file.sh

3. 运行

bash 复制代码
./watch_file.sh

现在只要 echo "hello" >> /tmp/test.txt,日志就会写入 /tmp/filewatch.log


方案二:systemd.path(更稳定的服务化方式)

适合长期运行的监控,不需要自己写循环。

1. 创建 .path 单元

/etc/systemd/system/filewatch.path

ini 复制代码
[Unit]
Description=Watch /tmp/test.txt changes

[Path]
PathChanged=/tmp/test.txt

[Install]
WantedBy=multi-user.target

2. 创建对应的 .service 单元

/etc/systemd/system/filewatch.service

ini 复制代码
[Unit]
Description=Action when /tmp/test.txt changes

[Service]
Type=oneshot
ExecStart=/usr/bin/bash -c 'echo "$(date): /tmp/test.txt changed" >> /tmp/filewatch.log'

3. 启动

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable --now filewatch.path

现在,每次 /tmp/test.txt 变化时,systemd 就会自动调用 filewatch.service


对比总结

特性 inotifywait 脚本 systemd.path
部署复杂度 简单,直接写脚本 稍复杂,要写 .path + .service
运行方式 前台/后台脚本 systemd 接管,稳定守护
适合场景 临时监控,调试 长期运行,系统级服务
相关推荐
用户9718356334666 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪7 小时前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠1 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush41 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩1 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
古城小栈1 天前
Unix 与 Linux 异同小叙
linux·服务器·unix
凡人叶枫1 天前
Effective C++ 条款42:了解 typename 的双重意义
java·linux·服务器·c++
2601_961875241 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant
java_cj1 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes