我的问题
你好,
我目前正在做一个项目来监控复制到 usb 密钥的文件。我正在使用 udev 来启动 inotify 脚本。
我目前正在努力查找何时安装 USB 密钥并获取路径(/media/user/<usb-name>
)。最困难的部分是,在 Ubuntu 22.04 上,插入计算机时密钥不会自动安装。所以我不得不等待用户安装它。(使用命令mount
或Nautilus
通过单击它来安装。)
因此脚本正在运行:
while true; do
local mountpoint=$(findmnt -rn -S "$deviceNode" -o TARGET)
# devide node is /dev/sda1
if [[ -n "$mountpoint" ]]; then
echo "USB device $deviceNode is mounted at $mountpoint" >> "$logFile"
else
echo "USB device $deviceNode is not mounted" >> "$logFile"
fi
((counter++))
echo "Iteration: $counter" >> "$logFile"
sleep 3
done
我的问题:
问题是脚本在 2 次迭代后停止。如果 sleep 为 1,则在 4 次迭代后停止。我不明白为什么。有人知道吗?
但我的方法可能不是最好的。还有其他方法可以实现我想要的效果吗?
脚本
/etc/udev/rules.d/99-usb-stick.rules
ACTION=="add", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", RUN+="/opt/data/wrapper.sh %N"
/opt/data/wrapper.sh
#!/bin/bash
# wrapper.sh
# Run the actual script in the background
/opt/data/test.sh $1 &
我使用这种方法是因为 udev 在程序运行时会暂停如此处所述,部分高级主题
/opt/data/test.sh
#!/bin/bash
# test.sh
# All my code goes here
我希望我已经表达清楚了,这是我的第一篇帖子。
谢谢。