Ubuntu 触发器的扩展思路与实现
一、先明确“触发器”的类型
二、按场景给出可扩展方案
三、最小可用示例
systemd 路径触发 + 定时器
#!/usr/bin/env bash
set -e
LOG=/var/log/trigger-demo.log
echo "$(date) path changed: $1" >> "$LOG"
chmod +x /usr/local/bin/trigger-handler.sh
# /etc/systemd/system/trigger-handler.service
[Unit]
Description=Handle path trigger
[Service]
Type=oneshot
ExecStart=/usr/local/bin/trigger-handler.sh "%f"
systemctl daemon-reload systemctl enable --now trigger-handler.service
# /etc/systemd/system/trigger.path
[Unit]
Description=Watch /opt/incoming
[Path]
PathModified=/opt/incoming
[Install]
WantedBy=multi-user.target
systemctl daemon-reload systemctl enable --now trigger.path
# /etc/systemd/system/trigger-timer.timer
[Unit]
Description=Run trigger every 5 minutes
[Timer]
OnCalendar=*:0/5
Persistent=true
[Install]
WantedBy=timers.target
# /etc/systemd/system/trigger-timer.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/trigger-handler.sh "timer"
systemctl daemon-reload systemctl enable --now trigger-timer.timer systemctl list-timers trigger-timer.timer
inotify 文件监听
sudo apt-get install inotify-tools
inotifywait -m -e create,modify,delete /opt/incoming --format '%e %w%f' | while read ev file; do
echo "$(date) $ev $file" >> /var/log/inotify-demo.log
# 可在此调用你的业务脚本
done
四、扩展时的稳定性与维护建议