我試圖在 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
仍然存在。在每個週期。這是我的設定:
/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