【发布时间】:2023-10-13 22:17:01
【问题描述】:
我有一个名为 media_change.sh 的 shell 脚本,它由 udev 角色在设备状态更改时运行。
UDEV
ACTION=="change", ATTRS{idVendor}=="057b", ATTRS{idProduct}=="0000", ENV{DISK_MEDIA_CHANGE}=="1", RUN+="/home/pi/media_change.sh $env{DEVNAME}"
media_change.sh
#!/bin/bash
exec >> /home/pi/mount.log 2>&1
echo "$(date) Start."
echo "$(date) Media change detected on device $1"
device=${1##*/}
echo $(whoami)
lsblk | grep $device
if [ $? -eq 0 ]; then
echo "$(date) Device exists on machine."
echo "$(date) Mounting device $1 to /mnt/floppy."
sudo -u pi sh /home/pi/test.sh
else
echo "$(date) Device does not exist on machine."
fi
echo "$(date) End."
这会执行另一个名为 test.sh 的 shell 脚本,它只是为我运行一个 nodejs 脚本
#!/bin/bash
echo $(whoami)
cd /home/pi/SpotifyDisk-node && node player.js file
如果我将 media_change.sh 作为 pi 运行,脚本会按预期运行
➜ ~ ./media_change.sh
Fri 6 Mar 13:57:23 GMT 2020 Start.
Fri 6 Mar 13:57:23 GMT 2020 Media change detected on device
pi
sda 8:0 1 1.4M 0 disk /mnt/floppy
Fri 6 Mar 13:57:23 GMT 2020 Device exists on machine.
Fri 6 Mar 13:57:23 GMT 2020 Mounting device to /mnt/floppy.
pi
DiskPlayer Not found in device list
Fri 6 Mar 13:57:27 GMT 2020 End.
如果我运行 media_change.sh sudo,脚本也会按预期运行 -
Fri 6 Mar 13:57:50 GMT 2020 Start.
Fri 6 Mar 13:57:50 GMT 2020 Media change detected on device
root
sda 8:0 1 1.4M 0 disk /mnt/floppy
Fri 6 Mar 13:57:50 GMT 2020 Device exists on machine.
Fri 6 Mar 13:57:50 GMT 2020 Mounting device to /mnt/floppy.
pi
DiskPlayer Not found in device list
Fri 6 Mar 13:57:54 GMT 2020 End.
但是当脚本通过 UDEV 在设备更改上运行时,它会给出以下错误 -
Fri Mar 6 14:02:27 GMT 2020 Start.
Fri Mar 6 14:02:27 GMT 2020 Media change detected on device /dev/sda
root
sda 8:0 1 1.4M 0 disk /mnt/floppy
Fri Mar 6 14:02:27 GMT 2020 Device exists on machine.
Fri Mar 6 14:02:27 GMT 2020 Mounting device /dev/sda to /mnt/floppy.
sudo: unable to resolve host DiskPlayer: Temporary failure in name resolution
pi
#
# Fatal error in , line 0
# Check failed: SetPermissions(buffer, allocated, PageAllocator::kReadExecute).
#
#
#
#FailureMessage Object: 0x7ec46800Illegal instruction
Fri Mar 6 14:02:27 GMT 2020 End.
【问题讨论】:
-
环境可能不同。 player.js 长什么样子?
-
相同的环境,我什至创建了一个简单的 test.js,它只是 console.log('test') 但这给了我同样的错误,再次,当通过 pi 或 sudo 执行时工作正常,只是没有不符合 UDEV 规则
-
如果你运行
./media_change.sh /dev/sda会发生什么? -
与dinofizzotti.com/blog/… 类似的想法仅适用于拇指驱动器?
-
我用它作为基础,仍然使用软盘,但我想扩展它,不知道去,所以将它重写到nodejs中,但无法获得运行我的idea角色新的播放器文件..
标签: javascript node.js linux bash udev