Проблема с разрешениями сценария UDEV Shell - PullRequest
0 голосов
/ 06 марта 2020

У меня есть сценарий оболочки с именем media_change. sh он запускается ролью 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, который просто запускает для меня сценарий nodejs

#!/bin/bash
echo $(whoami)
cd /home/pi/SpotifyDisk-node && node player.js file

Если я запускаю media_change. sh как пи Сценарий запускается как ожидалось

➜  ~ ./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.

1 Ответ

0 голосов
/ 06 марта 2020

Если ваш сценарий ищет соединения с использованием имени хоста DiskPlayer, возможно, проблема в файле hosts. См. https://askubuntu.com/questions/466122/why-i-got-unable-to-resolve-host-when-i-do-sudo.

Если проблема не в этом, вы получите ту же ошибку при удалении теста. sh и непосредственном вызове узла?

cd /home/pi/SpotifyDisk-node

sudo -u pi node player.js file

.

...