udev 不会正确执行规则
udev won't execute rule properly
udev 没有正确地 运行 我的 bash 脚本。
这是我的规则:
ACTION=="add", KERNEL=="sd*1", SUBSYSTEM=="block", ATTRS{idVendor}=="0930", ATTRS{idProduct}=="6544", RUN="/usr/local/bin/usb-bmw-in"
ACTION=="remove", KERNEL=="sd*1", SUBSYSTEM=="block", ATTRS{idVendor}=="0930", ATTRS{idProduct}=="6544", RUN="/usr/local/bin/usb-bmw-out"
下面是执行的脚本:
#!/bin/bash
echo timer > /sys/class/leds/led1/trigger
rsync --delete-after -c --preallocate -r /media/NAS/Sync/Musik/BMW/ /media/24366EC6366E9916/
umount /dev/sdc1
echo default-on > /sys/class/leds/led0/trigger
echo none > /sys/class/leds/led1/trigger
脚本应该点亮红色 LED,表示它正在运行。然后它应该将我的汽车播放列表复制到 USB 记忆棒并卸载设备。
完成后,它应该点亮绿色 LED 并关闭红色 LED。
红色 LED 正常亮起,rsync 命令也被触发,仅此而已。
红色 LED 仍亮着,设备仍处于安装状态,绿色 LED 尚未打开。
当我 运行 脚本手动运行时它工作正常。
实际上通过将底部的两个 echo 命令移动到 umount 命令上方并在后台 shell 使用 setsid 重新启动脚本使其工作,正如用户 "Alives" 在 stackexchange 上所解释的那样:
udev 没有正确地 运行 我的 bash 脚本。
这是我的规则:
ACTION=="add", KERNEL=="sd*1", SUBSYSTEM=="block", ATTRS{idVendor}=="0930", ATTRS{idProduct}=="6544", RUN="/usr/local/bin/usb-bmw-in"
ACTION=="remove", KERNEL=="sd*1", SUBSYSTEM=="block", ATTRS{idVendor}=="0930", ATTRS{idProduct}=="6544", RUN="/usr/local/bin/usb-bmw-out"
下面是执行的脚本:
#!/bin/bash
echo timer > /sys/class/leds/led1/trigger
rsync --delete-after -c --preallocate -r /media/NAS/Sync/Musik/BMW/ /media/24366EC6366E9916/
umount /dev/sdc1
echo default-on > /sys/class/leds/led0/trigger
echo none > /sys/class/leds/led1/trigger
脚本应该点亮红色 LED,表示它正在运行。然后它应该将我的汽车播放列表复制到 USB 记忆棒并卸载设备。
完成后,它应该点亮绿色 LED 并关闭红色 LED。
红色 LED 正常亮起,rsync 命令也被触发,仅此而已。 红色 LED 仍亮着,设备仍处于安装状态,绿色 LED 尚未打开。
当我 运行 脚本手动运行时它工作正常。
实际上通过将底部的两个 echo 命令移动到 umount 命令上方并在后台 shell 使用 setsid 重新启动脚本使其工作,正如用户 "Alives" 在 stackexchange 上所解释的那样: