Tôi đã xem xét /lib/udev/rules.d
các ví dụ về các quy tắc liên quan đến đĩa. Trên hệ thống Ubuntu, một tệp quy tắc cung cấp biến môi trường ID_FS_UUID_ENC
mà bạn có thể sử dụng trong các tệp quy tắc riêng.
Vì vậy, tôi đặt một tập tin quy tắc tùy chỉnh theo /etc/udev/rules.d/foodevice.rules
. Vì nó không có tiền tố với một số, nên cuối cùng nó được chạy bởi udev. Btw, trình nền udev đã theo dõi /etc/udev/rules.d
các thay đổi mà bạn không cần phải khởi động lại khi thay đổi tệp.
Nội dung của /etc/udev/rules.d/foodevice.rules
là:
ACTION=="add", KERNEL=="sd*[!0-9]", ENV{ID_FS_UUID_ENC}=="FFFF-AAAF",
RUN+="/usr/bin/sudo -u juser /home/juser/path/script.sh"
(đây là một quy tắc - bạn phải xóa dòng mới sau mệnh đề ENV vì udev không có cơ chế tiếp tục dòng)
Một chương trình được bắt đầu bởi udev chặn daemon - do đó nó không nên chạy trong một thời gian dài. Tôi đã giải quyết nó thông qua at
- tức là bằng cách tách ra khỏi quá trình thực hiện công việc thực tế:
$ cat /home/juser/path/script.sh
#!/bin/sh
echo ~/path/mountcopystuff.sh | at now