UDEV 规则中的一些 RUN 命令被忽略

UDEV 规则中的一些 RUN 命令被忽略

运行树莓派并更新到树莓派破坏者。对于 Jessie,相同的文件可以正常工作。我使用了以下 udev 规则:

# Idea from https://www.axllent.org/docs/view/auto-mounting-usb-storage/
KERNEL!="sd[a-z][0-9]", GOTO="media_by_label_auto_mount_end"
# Import FS infos
IMPORT{program}="/sbin/blkid -o udev -p %N"
# Get a label if present, otherwise specify one
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"
# Global mount options
ACTION=="add", ENV{mount_options}="relatime"
# Filesystem-specific mount options
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"
# Mount the device
ACTION=="add", RUN+="/bin/date >> /tmp/xx"
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}",  RUN+="/bin/date >> /tmp/xx"
# Clean up after removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"
# Exit
LABEL="media_by_label_auto_mount_end"

如果我添加我的 mp3 播放器,将创建一个目录 /media/MP3_INTENSO,如果我删除它,该目录将被删除。

只有当我有规则文件时才会发生这种情况。所以这肯定是文件的影响。

我尝试udevadm monitor并找到了预期的结果: UDEV [2378.210993] add /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/host0/target0:0:0/0:0:0:0/block/sda/sda1 (block)

运行udevadm test /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/host0/target0:0:0/0:0:0:0/block/sda/sda1然后返回:

dir_name=MP3_INTENSO
mount_options=relatime,utf8,gid=100,umask=002
TAGS=:systemd:
USEC_INITIALIZED=2377859838
run: '/bin/date >> /tmp/xx'
run: '/bin/mkdir -p /media/MP3_INTENSO'
run: '/bin/mount -o relatime,utf8,gid=100,umask=002 /dev/sda1 /media/MP3_INTENSO'
run: '/bin/date >> /tmp/xx'
Unload module index
Unloaded link configuration context.

看起来就像预期的那样。我可以在命令行中成功运行每个命令。但是,如果我只插入设备并且设备从未安装,那么我从未在 /tmp/xx 中找到条目。

我在 /var/log/messages 或 dmesg 中没有找到任何内容。

出了什么问题,我可以做些什么来进一步分析?

答案1

为了进一步分析,编辑/etc/udev/udev.conf和添加udev_log=debug.使用 重新启动 udev systemctl restart udev

这样您将获得以下信息:

'/bin/date >> /tmp/xx'(err) '/bin/date: extra operand '/tmp/xx''
'/bin/date >> /tmp/xx'(err) 'Try '/bin/date --help' for more information.'

所以看来“>>”不起作用。一个简单的 /usr/local/bin/log.sh 就可以完成这项工作。之后我发现mp3播放器已成功安装。现在有趣的问题是谁正在快速卸载设备,但这是另一个问题。

可以在以下位置找到安装失败的解释:archlinux-wiki

相关内容