首页 > 解决方案 > 在 Raspberry Pi 上自动挂载的 USB 插入上执行间歇性故障

问题描述

如果插入 USB 记忆棒,我已经设置了一个树莓派来执行命令,并且该命令调用记忆棒上的可执行文件。

这在大约 80% 的时间里有效,但间歇性地失败 - 似乎是随机的。由于不可预测性,我认为这是一种竞争条件,但是我不太熟悉风险在哪里,因为我从网上信息中拼凑出这种方法。大部分信息都来自这里

USB 记忆棒会自动安装,并在/etc/fstab. 我知道 /dev/sda1 更改的风险,但这似乎不是问题:

/dev/sda1 /media/usb vfat defaults,rw,nofail,user,umask=000 0 0

服务等待 USB 挂载,配置如下

[Unit]
Description=USB Mount Trigger
Requires=media-usb.mount
After=media-usb.mount

[Service]
ExecStart=/script.sh

[Install]
WantedBy=media-usb.mount

media-usb.mount来自systemctl list-units -t mount,并且 /script.sh 调用 U 盘的可执行文件。

在失败的情况下,没有调用 USB 的可执行文件,我看到以下内容systemctl status service_name

Nov 15 22:49:14 raspberrypi systemd[1]: Dependency failed for USB Mount Trigger.
Nov 15 22:49:14 raspberrypi systemd[1]: service_name.service: Job service_name.service/start failed with result 'dependency'.

在这些情况下,如果我执行,systemctl list-units -t mount我看不到media-usb.mount并且我的 USB 记忆棒未安装到 /media/usb。

我认为 service_name.service 中的错误/竞争条件导致 USB 挂载失败,因为(我相信)需要成功挂载才能触发服务。如果 USB 从未插入,systemctl status service_name只需报告Active: inactive (dead)因此触发服务尝试执行。

标签: usb-drivesystemctlautomount

解决方案


推荐阅读