首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Udev规则运行,脚本失败

Udev规则运行,脚本失败
EN

Unix & Linux用户
提问于 2022-03-03 13:49:20
回答 2查看 1.1K关注 0票数 1

我试图使用udev检测USB附加事件,然后运行脚本。这方面的例子很多,但我似乎无法使它发挥作用。

我的脚本是/usr/bin/是非常普通的usbattached.sh

代码语言:javascript
运行
复制
!/bin/bash

echo !Hello World!
mkdir /media/usb_device
mount /dev/sda1 /media/usb_device

我在/etc/udev/rues.d中的规则也是非常简单的usbconnected.rules

代码语言:javascript
运行
复制
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="18a5", ATTRS{idProduct}=="0243", RUN+="/bin/usbattached.sh"

我已经重置设备多次,希望udev将更新。到目前为止还没有。我还试图运行一个命令来刷新规则,但没有成功。

代码语言:javascript
运行
复制
udevadm control --reload-rules && udevadm trigger

我的规则/脚本有什么问题吗?

把我的USB插入我的设备我得到输出

代码语言:javascript
运行
复制
root@imx6ull14x14evk:/usr/bin# [  344.348033] usb 1-1: USB disconnect, device number 2
[  347.572148] usb 1-1: new high-speed USB device number 3 using ci_hdrc
[  347.796563] usb 1-1: New USB device found, idVendor=18a5, idProduct=0243, bcdDevice= 0.02
[  347.805120] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  347.820492] usb 1-1: Product: STORE N GO
[  347.829885] usb 1-1: Manufacturer: Verbatim
[  347.839204] usb 1-1: SerialNumber: 12050602000042
[  347.864925] usb-storage 1-1:1.0: USB Mass Storage device detected

编辑:我给了我的脚本使用chmod +x usbattached.sh的可执行权限

编辑2:打开udev调试和查看日志。我删除并添加我的USB设备。我在日志里看到了

代码语言:javascript
运行
复制
Mar 03 15:44:00 imx6ull14x14evk systemd-udevd[270]: 1-1: /etc/udev/rules.d/usbconnected.rules:1 RUN '/bin/usbattached.sh
Mar 03 15:44:00 imx6ull14x14evk systemd-udevd[270]: 1-1: Running command "/bin/usbattached.sh"
Mar 03 15:44:00 imx6ull14x14evk systemd-udevd[270]: 1-1: Starting '/bin/usbattached.sh'
Mar 03 15:44:00 imx6ull14x14evk systemd-udevd[270]: Successfully forked off '(spawn)' as PID 275.
Mar 03 15:44:00 imx6ull14x14evk systemd-udevd[270]: 1-1: Process '/bin/usbattached.sh' failed with exit code 1.
Mar 03 15:44:00 imx6ull14x14evk systemd-udevd[270]: 1-1: Command "/bin/usbattached.sh" returned 1 (error), ignoring.

这意味着我的脚本正在运行,但是出错了。

EN

回答 2

Unix & Linux用户

发布于 2022-03-03 16:40:16

!/bin/bash

您的bash是畸形的(第一个字符应该是#)。而且,udev将只使用sh运行脚本,而不使用bash。您应该做的第一件事是将shebang修复为#!/bin/sh

echo !Hello World!

  1. !是一个特殊的字符,所以您需要引用包含它的字符串,否则它将被shell解释。(前:echo '!Hello World!' )
  2. udev不会在交互式shell中运行脚本,因此echo'd文本不会出现在任何地方。如果要确认脚本正在运行,请将脚本重定向到一个文件:echo '!Hello World!' > /tmp/output_$(date +%s).txt ( $(date +%s)部件在每次运行脚本时给文件一个唯一的名称)。
票数 1
EN

Unix & Linux用户

发布于 2022-03-03 16:02:58

将脚本移动到/home/michael解决了这个问题。我认为这与用户特权有关。

在开发过程中,我使用终端作为根。在/usr/bin中运行命令,就像我在预期的那样工作。我假设udev是作为一个没有根权限的用户运行的。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/692802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档