![通过/etc/udev/rules.d/连接usb时写入文件](https://linux22.com/image/1127842/%E9%80%9A%E8%BF%87%2Fetc%2Fudev%2Frules.d%2F%E8%BF%9E%E6%8E%A5usb%E6%97%B6%E5%86%99%E5%85%A5%E6%96%87%E4%BB%B6.png)
当我将 USB 连接到 Linux 时,我试图在其中写入一些文件。
实际上,我有一个文件/etc/udev/rules.d/
:
ACTION=="add", ENV{ID_FS_UUID}=="9FE8-99G3", RUN+="/usr/bin/sudo -u myuser /home/myuser/Scripts/mycrazy.sh"
在 中mycrazy.sh
,我有:
## Path to mounted device
PATH_USB=/run/media/myuser/9FE8-99G3
mkdir $PATH_USB/some_folder
mkdir /home/myuser/Documents/another_folder
第一个 mkdir 不起作用。但第二个起作用了。
我该如何将文件写入 usb?我的脚本中缺少什么吗?
答案1
对我有用的是添加延迟(
sleep
)和disown
使用中间脚本具有延迟的脚本。RUN{
type
}
... This can only be used for very short-running foreground tasks. Running an event process for a long period of time may block all further events for this or a dependent device. Starting daemons or other long running processes is not appropriate for udev; the forked processes, detached or not, will be unconditionally killed after the event handling has finished.
来源:
man udev
这里有一个类似的案例:为什么如果我使用 udevadm 触发器,我的 udev 规则会运行,但在启动时却不运行?。Fëamarto 的回答似乎比我这里的解决方案更好。它会等待其文件系统在
rw
模式下准备就绪。你可以尝试一下。因为这是 USB 驱动器,所以可以在安装前将其移除。脚本将保持活动状态,直到下次重新启动或再次插入(这将触发另一个实例)并安装。
解决该问题的一种方法是检查
/dev/sdxY
每个周期是否仍然存在相关问题。这是我的设置:
/etc/udev/rules.d/99-sneetsher-tests.rules
ACTION=="add", ENV{ID_FS_UUID}=="6664-B2DA", RUN+="/usr/bin/sudo -u user /home/user/mycrazy.sh"
/home/user/mycrazy.sh
#!/bin/sh /home/user/mycrazy2.sh & disown
/home/user/mycrazy2.sh
#!/bin/sh PATH_USB=/media/user/MYFLASH3 sleep 5 mkdir $PATH_USB/some_folder