如何触发脚本运行始终保持连接驱动器是否已安装?
我已尝试过udev
,具体制定了一条99-local.rules
规则/etc/udev/rules.d
:
KERNEL=="mmcblk0",ACTION=="mount",RUN+="/path/to/script.sh"
并重新加载规则。但是驱动器安装后,脚本不会运行。
请注意,驱动器是SD卡,因此mmcblk0
得名块设备。它是不是USB 驱动器,不是正在热插拔。
答案1
事实证明,使用 实现这一点并不容易udev
。使用udevadm monitor -p
我验证了,安装时,我的 SD 卡不会ACTION=="mount"
在 中触发任何事件udev
。我读到某处说该mount
事件已被弃用或删除,如果属实,这就可以解释这一点。udev
毕竟, 应该管理热插拔。
此外,udev
触发脚本必须非常快速地完成,因为它们udev
在运行时会阻塞。对于备份等重要任务来说,这并不理想。
我通过使用for编写systemd
服务文件实现了我的目标:/etc/systemd/system/
ExecStart
.mount
[Unit]
Description=Script to run when drive mounted at /path/to/Stuff
Requires=path-to-Stuff.mount
After=path-to-Stuff.mount
[Service]
ExecStart=/path/to/script.sh
Type=forking
[Install]
WantedBy=path-to-Stuff.mount
尽管需要指定挂载点,但可以正常工作。