Я использовал правило Udev для вызова команды curl, когда определенное устройство подключается к моей машине. Он отлично работал с Ubuntu 14.04. Как только я обновлю машину до Ubuntu 18.04, она перестанет работать.
Мое правило udev было таким
ACTION= = "add|remove", ENV{PRODUCT}= = "acd/3520/*", RUN+ = "/home/leapset/system/devicemanager/trigger-device-connection.sh"
Внутри сценария он вызывает команду curl, как показано ниже.
curl -X GET 'http://127.0.0.1:8080/moxy/rest/device/connectivity/change' -m 2 2> /dev/null &
Он всегда говорит о тайм-ауте команды curl, хотя я увеличил тайм-аут до 30 секунд.
Какие изменения, внесенные в Ubuntu 18.04, не позволяют мне использовать приведенную выше реализацию?





Нашел ответ в соседней теме.
https://lists.freedesktop.org/archives/systemd-devel/2018-August/041195.html
Похоже, что ограничение службы Udev помешало нам использовать вышеуказанную функцию.
Конфигурация службы по умолчанию (/lib/systemd/system/udev.service) не позволяет нам вызывать любой IP-адрес.
[Service]
Type=notify
OOMScoreAdjust=-1000
Sockets=systemd-udevd-control.socket systemd-udevd-kernel.socket
Restart=always
RestartSec=0
ExecStart=/lib/systemd/systemd-udevd
KillMode=mixed
WatchdogSec=3min
TasksMax=infinity
MountFlags=slave
MemoryDenyWriteExecute=yes
RestrictRealtime=yes
RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6
SystemCallArchitectures=native
LockPersonality=yes
IPAddressDeny=any
Чтобы решить проблему, мы добавляем еще одну запись в конец файла.
IPAddressAllow=127.0.0.1
После этого Udev может уведомить устройство о подключении к POS.
Думал добавить это как вопрос, так как не нашел ответа на него в переполнении стека. Я надеюсь, что ответ на этот вопрос поможет любому другому человеку в будущем.