Running external programs upon certain events


udev 규칙들을 작성하는 또 다른 이유는 디바이스가 연결 또는 연결 해제 되었을 때 특정 프로그램을 실행할 수 있기 때문입니다. 예를 들어 여러분들의 디지털 카메라가 연결되었을 때 자동적으로 모든 사진들을 다운받는 스크립트를 실행할 수 있습니다.


위에서 설명한 PROGRAM과 혼동하시면 안됩니다. PROGRAM은 디바이스 이름을 명명하기 위해 실행되는 프로그램이며 그 외에는 아무런 기능을 가지고 있지 않습니다.  프로그램들이 실행될 때 디바이스 노드가 아직 만들어지지 않았다면 어떤 상황이던지 프로그램을 실행할 수 없습니다.


여기서 소개하는 기능은 항상 디바이스 노드가 생성된 이후 프로그램을 실행해야 합니다. 이 프로그램은 디바이스에서 동작할 수 있으나, 프로그램이 실행되는 동안 udev가 효율을 위해 프로그램을 정지 시키기 때문에 장시간 실행은 되지 않습니다. 이 제한사항의 한 가지 해결책은 여러분의 프로그램이 즉시 분리(? 원문에는 detach라고 되었습니다.)되는지 확인하는 것입니다.


아래 예제는 규칙에 RUN assignment를 사용하는 방법을 보여줍니다.


KERNEL=="sdb", RUN+="/usr/bin/my_program"


/usr/bin/my_program이 실행 되었을 때, udev 환경의 다양한 부분들이 SUBSYSTEM처럼 key value를 포함하고 있는 환경 변수로써 사용 할 수 있습니다. 또한 여러분들은 ACTION 환경 변수를 이용하여 디바이스가 연결되었는지 연결 해제되었는지 확인할 수 있습니다. ACTION 환경 은 “추가” 또는 “제거” value를 가지기 때문입니다.


udev는 프로그램들을 활성화된 terminal과 쉘 컨텍스트에서는 실행하지 않습니다. 하지만 만약 프로그램이 쉘 스크립트이고 shebang(e.g #!/bin/sh)으로 시작된다면 그 프로그램은 실행될 수 있습니다. 하지만 터미널에는 어떠한 표준 출력도 표시되지 않을 것 입니다.


(*shebang : 스크립트의 가장 윗 줄에 이 스크립트를 실행할 인터프리터와 실행 옵션을 작성하게 되는데 그 가장앞에 붙는 #! 를 shebang이라고 합니다.)