나는 라즈베리 파이를 사용하고 있습니다. 이전에는 udev rule
USB 플래시 드라이브를 연결하면 스크립트를 실행 하곤 했습니다 . 파일의 내용은 다음과 같습니다 /etc/udev/rules.d/10-usbstick.rules
.
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z]1" SYMLINK+="usbflash", RUN+="/path/to/myhup.sh"
그런 다음 myhup.sh
:
#!/bin/sh
nohup /path/to/myscript.sh
이 방법은 매우 효과적입니다. USB 플래시 드라이브를 삽입하면 자동으로 파일 실행이 시작됩니다 myscript.sh
.
하지만 Jessie로 업그레이드한 후에는 작동하지 않습니다. USB 플래시 드라이브를 삽입할 때 다음 오류가 발생합니다.
[ 2026.652130] sd 0:0:0:0: [sda] No Caching mode page found
[ 2026.652238] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 2029.532163] ntfs: (device sda1): check_mft_mirror(): $MFT and $MFTMirr (record 0) do not match. Run ntfsfix or chkdsk.
[ 2029.532355] ntfs: (device sda1): load_system_files(): $MFTMirr does not match $MFT. Mounting read-only. Run ntfsfix and/or chkdsk.
방법을 사용하기로 결정했습니다 systemd service
. 그래서 나는 udev rule
그것을 다음과 같이 바꿨습니다.
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z]1" SYMLINK+="usbflash", RUN+="systemctl start myusb.service"
그리고 myusb.service
다음을 생성했습니다:
[Unit]
Description=run myscript
[Service]
Type=oneshot
ExecStart=/path/to/myscript.sh
[Install]
WantedBy=multi-user.target
그런 다음:
sudo chmod 644 /lib/systemd/system/myusb.service
sudo systemctl daemon-reload
sudo systemctl enable myusb.service
sudo reboot
이번에는 다시 작동하지 않았고 다음 오류가 보고되었습니다.
[ 2026.652130] sd 0:0:0:0: [sda] No Caching mode page found
[ 2026.652238] sd 0:0:0:0: [sda] Assuming drive cache: write through
그렇다면 USB 플래시 드라이브가 연결되어 있을 때 Jessie에서 자동으로 스크립트를 실행하려면 어떻게 해야 합니까?
답변1
udev에서 systemd 장치를 실행하려면 이제 장치 이름만 지정하면 됩니다(참고자료 참조 man systemd.device
). 예를 들어, (/usr)을 보면 /lib/udev/rules.d/99-systemd.rules
다음과 같은 예를 찾을 수 있습니다.
SUBSYSTEM=="bluetooth", TAG+="systemd", ENV{SYSTEMD_WANTS}+="bluetooth.target"
여기에는 두 가지 중요한 사항이 있습니다. systemd 를 추가해야 하고, 유닛의 (기본) 이름 TAG
으로 설정해야 합니다 . SYSTEMD_WANTS
사용 규칙이 없으면 SYSTEMD_WANTS
해당 버전이 아직 이 기능을 지원하지 않을 수 있습니다.
그래서 귀하의 경우에는
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z]1", SYMLINK+="usbflash", TAG+="systemd", ENV{SYSTEMD_WANTS}+="myusb.service"
udev 규칙에는 쉼표가 없습니다. 귀하가 나열한 2개의 오류는 [sda]
참고용일 뿐이며 문제가 아니라는 점에 유의하시기 바랍니다.