USB 키에서 내 컴퓨터로 파일을 자동으로 복사하는 udev 규칙을 작성했습니다.
ACTION=="add",KERNEL=="sd[d-z][1-9]",ATTRS{serial}=="0701278A8DAE6B42",RUN+="/home/marco/Documents/MesScripts/essai_udev.sh"
내 스크립트는 다음과 같습니다
#!/bin/sh
exec /bin/cp /media/marco/EMTEC/2nde_2023_2024/DS1/DS1.pdf /home/marco/Documents/Travail/Malherbe/2nde/Malherbe_2023_2024/DS/DS1/
여기서 EMTEC은 내 USB 키입니다. 또한 "cp" 또는 "/bin/cp"를 작성해 보았지만 아무 효과가 없었습니다. 이 명령을 변경하면
echo "Hello!" > toto.txt *
효과가있다! 누구든지 나를 도와줄 수 있나요?
답변1
udev
실제로 장치를 사용하는 작업보다는 나중에 시스템의 다른 부분에서 사용할 수 있도록 장치를 설정하는 간단한 작업에 적합합니다. 이러한 복잡한 작업은 다음과 같은 udev 이벤트를 수신하는 외부 애플리케이션에 의해 가장 잘 수행됩니다.유딕스된(산),네트워크 관리자(인터넷) 등
~에서udev 맨페이지:
RUN{type}
(...)는 매우 짧은 시간 동안 실행되는 전경 작업에만 사용할 수 있습니다. 장기 실행 이벤트 프로세스는 해당 장치 또는 슬레이브 장치에 대한 모든 추가 이벤트를 차단할 수 있습니다.프로그램이 실행 중이니 참고하세요.웹에 접속하거나 udev 규칙 내에서는 파일 시스템 마운트/마운트 해제가 허용되지 않습니다., systemd-udevd.service에 시행되는 기본 샌드박스로 인해.
데몬이나 기타 장기 실행 프로세스는 시작될 수 없습니다. 분리 여부에 관계없이 분기된 프로세스는 이벤트 처리가 완료된 후 무조건 종료됩니다. udev 규칙에서 장기 실행 프로세스를 활성화하려면 서비스 단위를 제공하고 SYSTEMD_WANTS 장치 속성을 사용하여 udev 장치에서 이를 가져옵니다. 바라보다 시스템 장비(5)더 알아보기.
내가 강조하는 것은 규칙이 실행될 때 파일 시스템이 마운트되지 않는다는 것입니다. 이것이 cp
명령이 실패하는 이유입니다.
시스템의 자동 마운트를 우회하고 장치를 직접 마운트하려는 경우 다음을 참조하세요.그 대답.
개인적으로 나는 내 시스템이 평소처럼 장치를 자동으로 마운트하고 트리거할 일부 이벤트를 수신하도록 할 것입니다 cp
. 시스템과 취향에 따라 다를 수 있습니다.D 버스이벤트나 이용inotifyFS 이벤트를 캡처합니다.