I want my RPi 2 (with
MiniBian (a minimal version of Debian-based
Raspbian OS) as its OS) to execute a script when it detects a USB flash memory is inserted. So this is what I have done:
/etc/udev/rules.d/10-usbstick.rules with these contents:
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd*" SYMLINK+="usbflash", RUN+="/path/to/myscript.sh"
And then created
/path/to/myscript.sh with these contents:
#!/bin/bash mount /dev/usbflash /mnt/ service omxd stop rm -r /path/to/myfolder/* cp -f /mnt/*.mp4 /path/to/myfolder/ cp -f /mnt/*.avi /path/to/myfolder/ sleep 1 umount /dev/usbflash halt
Now, when I insert a USB flash memory, it recognizes it, mounts it, stops the
omxd daemon and removes all the older files.
But the problems is that it shuts down (
halt) before all the files have been copied. I check later and see that only 1 file has been copied, and it has not been copied correctly, like the
halt command has been executed at the middle of the copying procedure.
So, I decided to use
wait command to ensure that the
halt command be executed only at the end. I edited the
/path/to/myscript.sh file as this:
#!/bin/bash mount /dev/usbflash /mnt/ PID1 = $! wait PID1 service omxd stop rm -r /path/to/myfolder/* PID2 = $! wait PID2 cp -f /mnt/*.mp4 /path/to/myfolder/ PID3 = $! wait PID3 cp -f /mnt/*.avi /path/to/myfolder/ PID4 = $! wait PID4 sleep 1 umount /dev/usbflash PID5 = $! wait PID5 halt
But again the same scenario happens: the system halts at the middle of the copying procedure.
So what's wrong with my system?
What shall I do to tell the system to
halt only after all the new files have been successfully copied !?
halt didn't work. The same scenario happens again.
I edited the
/path/to/myscript.sh file as the following:
mkdir -p /mnt/usb if mount /dev/usbflash /mnt/usb then service omxd stop rm -r /path/to/myfolder/* cp -f /mnt/usb/*.mp4 /path/to/myfolder/ cp -f /mnt/usb/*.avi /path/to/myfolder/ sync umount /mnt/usb sync shutdown -h now fi
But it didn't help either! The same scenario happens again! And this time it was worse: it didn't copy any file at all!
I changed the
/etc/udev/rules.d/10-usbstick.rules to the following:
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z]1" SYMLINK+="usbflash", RUN+="/path/to/myscript.sh"
Now it works great. It copies all the files. But there's a new problem: It doesn't shut down!
I found something new:
When I run
myscript.sh directly from the terminal, it works perfect: removes the older files, copies the new files, and shuts down the system. Perfect.
So, why doesn't it execute
myscript.sh perfectly when I call it from udev rules?
And is there any other way to shut down the system after it has copied the files !?