udev에서 실행하면 스크립트가 다르게 실행됩니다.

udev에서 실행하면 스크립트가 다르게 실행됩니다.

이상하게 보이는 스크립트에 문제가 있습니다. udev에서 실행하면 조기에 실행이 중지되는 것 같지만, 명령줄에서 수동으로 실행하면 그렇지 않습니다. 문제 해결을 위해 이것을 사용해 보았는데 set -x명령줄에서 실행하면 모든 것이 예상대로 작동합니다. 그러나 udev에서 실행하면 특정 지점 이후에 조기에 중지됩니다.

내 생각에 문제의 일부는 udev에 의해 실행될 때 스크립트를 디버깅하기 어렵다는 것입니다. 나는 logger진술을 시도했지만 그들은 기본적으로 나에게 똑같은 말을 했습니다(조기 중단되었습니다).

이 문제를 일으킬 수 있는 팝업이 표시됩니까?


스크립트를 찾을 수 있습니다여기. 주목할 점 중 하나는 임베디드 시스템에 적합하다는 것입니다. 명령줄에서 수동으로 실행할 때 실행하는 명령은 다음과 같습니다.

./product.sh -b update /dev/sda1

스크립트 실행을 위한 udev 규칙은 다음과 같습니다.

ACTION=="add", KERNEL=="sd?1", RUN+="/usr/sbin/product.sh -b update /dev/%k"

스크립트가 몇 줄에서 멈추는 것 같습니다.195또는197존재하다 product.sh. 나는 그 줄을 주석 처리하면스물 둘그리고28product-manifest.shudev로 실행하고 명령줄에서 수동으로 실행하면 모든 것이 예상대로 작동합니다.

답변1

좋아요, 이 문제를 해결한 것 같아요. 문제는 라인의 결과라고 생각합니다157출력을 마운트된 USB 드라이브인 파일로 리디렉션했습니다. 내 생각엔 리디렉션이 동시에 완료되고 product-manifest.sh스크립트가 완료 후에도 계속되어 궁극적으로 USB 드라이브에 대한 동시 쓰기가 완료되기 전에 USB 드라이브가 마운트 해제되는 원인이 되는 것 같습니다. umount가 동시에 발생하면 일부 오류가 발생하여 결국 스크립트가 조기 종료되는 원인이 됩니다.

해결 방법은 출력을 SD 카드로 리디렉션한 다음 cpUSB 드라이브에 복사하는 것입니다.

product-manifest.sh > "/tmp/MANIFEST"
cp "/tmp/MANIFEST" "$1"

올바른 방향을 알려준 @mikeserv에게 감사드립니다.

관련 정보