usb-drive - 在 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)
因此触发服务尝试执行。
解决方案
推荐阅读
- reason - 我将如何编写一个通用函数来处理 ReScript 中的多种记录类型?
- php - centos7_aarch64下编译安装php7.4时出错
- java - 使用 switch 语句将随机数转换为字符串
- mongodb - 当我将网络访问更改为任何 IP 地址甚至包括我自己的 IP 地址时,为什么会出现错误?
- arcore - 写出 ARCore 位置数据?(增强面)
- html - 如何使 SVG 文本字母从右向左淡出?
- macos - Mac快捷键:如何让cmd+delete向后删除一个单词而不是默认option+delete?
- android - 致命信号 11 (SIGSEGV),代码 1,tid 27896 (JDWP) 中的故障地址 0x14,pid 27888
- android - 如果没有 @Provides-annotated 方法,就无法提供 android.content.Context
- django - 无法显示来自 django 模型的图像