透過 /etc/udev/rules.d/ 連接時在 USB 中寫入文件

透過 /etc/udev/rules.d/ 連接時在 USB 中寫入文件


我試圖在 Linux 中/etc/udev/rules.d/連接 時在 USB 中寫入一些檔案。

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 不起作用。但第二個有效。
如何在U盤中寫入檔案?我的腳本中是否缺少某些內容?

答案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 規則會運行,但不會在啟動時運行?費阿馬託的回答似乎比我這裡的解決方案更好。它會等待,直到其檔案系統在模式下準備就緒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
      

相關內容