2012-05-04 3 views
0

나는 Linux 배시에서 udev와 bash 스크립팅을 사용하여 프로그램을 작성했다.usb plugin/out in Linux

usb가 연결되면 udev 규칙이 실행되어 스크립트를 호출합니다. 이 스크립트는/var/log/messages 파일을 읽고 로그 파일에서 usb 하드 드라이브에 관한 정보를 얻고 이메일에 정보를 보냅니다.

프로그램이 정상적으로 작동하지만 문제가 발생했습니다. 내가 USB를 제거하려고 할 때, 그것을 흔들어야한다. (내부에 단단히 주입 됨) 제거 과정에서 제거, 부착, 부착물 제거 그리고 마침내 제거가 일어난다. 이 때문에 내 이메일 형식은 방해 얻고 나는 그것을 여러 쓸모없는 이메일을 생성 information.also 적절한 얻을 해달라고하고 난 다음 로그를 얻을 :

May 04 13:06:13 coil sendEmail[12467]: Email was sent successfully! 
May 4 13:06:13 coil vmbackup[12450]: USB Removed: Email sent to [email protected] 
May 4 13:06:16 coil kernel: [8474935.215393] usb 2-6: USB disconnect, address 126 
May 4 13:06:16 coil kernel: [8474935.601292] usb 2-6: new high speed USB device using ehci_hcd and address 127 
May 4 13:06:17 coil kernel: [8474935.868637] usb 2-6: configuration #1 chosen from 1 choice 
May 4 13:06:17 coil kernel: [8474935.915429] scsi85 : SCSI emulation for USB Mass Storage devices 
May 4 13:06:17 coil kernel: [8474935.982734] input: Western Digital My Book as /devices/pci0000:00/0000:00:1d.7/usb2/2-6/2-6:1.1/input/input82 
May 4 13:06:17 coil kernel: [8474935.982808] generic-usb 0003:1058:1102.0050: input,hidraw0: USB HID v1.11 Device [Western Digital My Book] on usb-0000:00:1d.7-6/input1 
May 4 13:06:17 coil kernel: [8474935.982808] generic-usb 0003:1058:1102.0050: input,hidraw0: USB HID v1.11 Device [Western Digital My Book] on usb-0000:00:1d.7-6/input1 
May 4 13:06:17 coil kernel: [8474936.084957] usb 2-6: USB disconnect, address 127 
May 4 13:06:17 coil kernel: [8474936.500051] usb 2-6: new high speed USB device using ehci_hcd and address 2 
May 4 13:06:17 coil kernel: [8474936.769487] usb 2-6: configuration #1 chosen from 1 choice 
May 4 13:06:17 coil kernel: [8474936.815499] scsi86 : SCSI emulation for USB Mass Storage devices 
May 4 13:06:18 coil kernel: [8474936.882954] input: Western Digital My Book as /devices/pci0000:00/0000:00:1d.7/usb2/2-6/2-6:1.1/input/input83 
May 4 13:06:18 coil kernel: [8474936.883044] generic-usb 0003:1058:1102.0051: input,hidraw0: USB HID v1.11 Device [Western Digital My Book] on usb-0000:00:1d.7-6/input1 
May 4 13:06:22 coil kernel: [8474941.837814] scsi 86:0:0:0: Direct-Access  WD  My Book   1028 PQ: 0 ANSI: 4 
May 4 13:06:22 coil kernel: [8474941.838208] sd 86:0:0:0: Attached scsi generic sg3 type 0 
May 4 13:06:22 coil kernel: [8474941.838208] sd 86:0:0:0: Attached scsi generic sg3 type 0 
May 4 13:06:23 coil kernel: [8474941.860051] sd 86:0:0:0: [sdc] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB) 
May 4 13:06:23 coil kernel: [8474941.873798] sd 86:0:0:0: [sdc] Write Protect is off 
May 4 13:06:23 coil kernel: [8474941.955971] sdc: sdc1 
May 4 13:06:23 coil kernel: [8474942.014853] sd 86:0:0:0: [sdc] Attached SCSI disk 
May 04 13:06:23 coil sendEmail[12495]: Email was sent successfully! 
May 4 13:06:23 coil vmbackup[12478]: USB Added: Email sent to [email protected] 
May 04 13:06:26 coil sendEmail[12527]: Email was sent successfully! 
May 4 13:06:26 coil vmbackup[12510]: USB Removed: Email sent to [email protected] 
May 04 13:06:35 coil sendEmail[12546]: Email was sent successfully! 
May 4 13:06:35 coil vmbackup[12535]: USB Added: Email sent to [email protected] 
May 04 13:06:37 coil sendEmail[12576]: Email was sent successfully! 
May 4 13:06:37 coil vmbackup[12559]: USB Removed: Email sent to [email protected] 
May 04 13:06:48 coil sendEmail[12596]: Email was sent successfully! 
May 4 13:06:48 coil vmbackup[12585]: USB Added: Email sent to [email protected] 

지금 나는이 문제를 코딩되지 않는다는 것을 알 수있다. 하지만 어떻게 든이 문제를 해결할 수 있는지 알고 싶습니다. 이 시나리오에주의하십시오.

답변

0

스크립트에서 일종의 디 - 바운싱을해야합니다. 호출 될 때마다 최근에 호출되었는지 확인합니다 (< 1 초 또는 2 초). 그렇다면 아무 것도하지 마십시오. 파일을 시간 표시기로/tmp의 시간 소인으로 사용할 수 있습니다.

이런 식으로 뭔가를 작동 할 수 있습니다 :

delta=2 # 2 seconds of debounce 
stampfile=/tmp/stamp 
now=$(date +%s) 
then=$(< $stampfile) 
[[ -z $then ]] && then=$now 
diff=$((now-then)) 
if [[ $((diff < delta)) ]]; then 
    exit 
else 
    echo $now > $stampfile 
fi 
관련 문제