通过/etc/udev/rules.d/连接usb时写入文件

通过/etc/udev/rules.d/连接usb时写入文件

当我将 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每个周期是否仍然存在相关问题。

  • 这是我的设置:

    1. /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"
      
    2. /home/user/mycrazy.sh

      #!/bin/sh
      
      /home/user/mycrazy2.sh & disown
      
    3. /home/user/mycrazy2.sh

      #!/bin/sh
      
      PATH_USB=/media/user/MYFLASH3
      sleep 5
      mkdir $PATH_USB/some_folder
      

相关内容