Почему не выполняется команда RUN при подсоеинении флэшки? (Команда RUN прописана в правилах)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Аватара пользователя
жучара
Сообщения: 664
ОС: астралинукс

Почему не выполняется команда RUN при подсоеинении флэшки?

Сообщение жучара »

Друзья!

Вот файл правил 99-local.rules. Обратите внимание, где он раcположен и имя. По-любому при присоединении флэшки сервис systemd-udev (а у меня такой) должен выполнить команду, указанную в RUN

Shell

user@astra:~$ cat /etc/udev/rules.d/99-local.rules
KERNEL=="sd[a-z][0-9]", SUBSYSTEMS=="usb", ACTION=="add", RUN+="/bin/echo helloword > /dev/pts/0"
user@astra:~$
Перезагрузим правила

Shell

user@astra:~$ sudo udevadm control --reload-rules
user@astra:~$

Ксати говоря. Сообщение "helloword" должно вывестись в /dev/pts/0. Посмотрим на /dev/pts/0, воткнём флэшку и подождём.

Shell

user@astra:~$ ps
PID TTY TIME CMD
1544 pts/0 00:00:00 bash
3868 pts/0 00:00:00 ps
user@astra:~$
В общем бесполезно. Ко всему прочему в манах написано, что RUN должна быть короткой. Кто скажет, что она длинная, пусть первым бросит в меня камень. Флэшка рабочая, на момент наблюдения за /dev/pts/0 её можно примонтировать вручную.

ЧЯДНТ? Спасибо, кто октликнется. Астралинукс, Орёл 2.12
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18669
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Почему не выполняется команда RUN при подсоеинении флэшки?

Сообщение Bizdelnick »

Во-первых, появление дискового раздела относится к подсистеме block, а не usb. Смотрите, что выводит udevadm monitor -kp при подключении флешки. Во-вторых, в RUN надо указывать только команду с аргументами: она будет запускаться непосредственно, а не интерпретироваться шеллом.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Почему не выполняется команда RUN при подсоеинении флэшки?

Сообщение Hephaestus »

жучара писал(а):
21.02.2020 22:51
в манах написано, что RUN должна быть короткой
Короткая в том смысле, что там не должно быть множества всяких параметров.
Я в своё время возился с этой штукой, когда мне нужно было выполнять команды, при втыкании usb-модема.
Не срабатывало.
За давностью лет я сейчас могу напутать, но вроде бы я тогда обнаружил, что команда, напрямую указанная в RUN не выполняется. А если команды записать в shell-скрипт и в RUN указать его - работает.
жучара писал(а):
21.02.2020 22:51
Ксати говоря. Сообщение "helloword" должно вывестись в /dev/pts/0. Посмотрим на /dev/pts/0, воткнём флэшку и подождём.
Именно в /dev/pts/0 у меня тоже не получилось, а в обычный файл - получилось, но немного иначе - через bash.

Применительно к Вашему примеру это будет так:

Shell

KERNEL=="sd[a-z][0-9]", SUBSYSTEMS=="usb", ACTION=="add", RUN+="/bin/bash -c '/bin/echo helloword > /tmp/file'"
UPD: А, не. В /dev/pts/* тоже получилось, это я имя файла перепутал.
Вот так

Shell

KERNEL=="sd[a-z][0-9]", SUBSYSTEMS=="usb", ACTION=="add", RUN+="/bin/bash -c '/bin/echo helloword > /dev/pts/0/'"
должно сработать.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 664
ОС: астралинукс

Re: Почему не выполняется команда RUN при подсоеинении флэшки?

Сообщение жучара »

Да, действительно, работает программа, не обрабатывающаяся шеллом. То есть либо, как предложил Hephaestus, либо свой (в смысле на С написанный) простой бинарничек какой-нибудь. Аналогов среди штатных команд не нашёл, ну да и ладно.
Bizdelnick писал:
21.02.2020 23:54
Во-первых, появление дискового раздела относится к подсистеме block, а не usb. Смотрите, что выводит udevadm monitor -kp при подключении флешки.
так всё работает, что на втыкание, что на вытыкание:

Shell

user@astra:~$ cat /etc/udev/rules.d/99-local.rules
KERNEL=="sd[a-z][0-9]", SUBSYSTEMS=="usb", ACTION=="add", RUN+="/bin/bash -c '/bin/echo helloword_mount > /dev/pts/0'"
KERNEL=="sd[a-z][0-9]", SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/bin/bash -c '/bin/echo helloword_unmount > /dev/pts/0'"
user@astra:~$
:pardon:
Я просто читаю маны.
Спасибо сказали: