Добавление правил udev приводит к тайм-ауту сети systemd

mkdir -p "$ @" создать все каталоги, имена которых передаются в качестве аргументов ( $ @ ).

Параметр -p позволяет рекурсивно создавать каталоги, если они находятся в несуществующих каталогах.

eval cd "\" \ $$ # \ "" просто перейдите в последний каталог: $ # даст вам номер переданного аргумента, таким образом \ $$ # предоставит вам последний аргумент (то есть: последнее имя каталога, которое вы передали в качестве аргумента). Например, если есть три аргумента, $ # равно 3 , поэтому eval запускает команду cd "$ 3" .

На самом деле команда должна была быть eval cd "\" \ $ {$ #} \ "" . Фигурные скобки необходимы во многих оболочках, когда аргументов на 10 больше, потому что многие оболочки рассматривают что-то вроде "$ 10" как значение параметра 1, за которым следует символ 0 , а не как значение параметра 10.

1
27.09.2018, 12:58
2 ответа

Одно отношение это udevadm settleв выводеsystemctl cat networking:

ExecStartPre=-/bin/sh -c '[ "$CONFIGURE_INTERFACES" != "no" ] && [ -n "$(ifquery --read-environment --list --exclude=lo)" ] && udevadm settle'

Подумайте, что man udevговорит о ключе RUN:

This can only be used for very short-running foreground tasks. Running an event process for a long period of time may block all further events for this or a dependent device.

Starting daemons or other long-running processes is not appropriate for udev; the forked processes, detached or not, will be unconditionally killed after the event handling has finished.

0
28.04.2021, 23:41

Ответ Ференца дал мне понять, что проблема может быть связана с моими собственными скриптами.

На самом деле, сценарии должны переключать GPU и перезапускать X-сервер (LightDM )каждый раз, когда я подключаю/отключаю свой ноутбук.

Итак,кажется, что udev выполнил сценарии во время загрузки, поэтому они пытались перезапустить X и, очевидно, потерпели неудачу.

Я добавил следующий код в начало моего onbat.sh/ onchg.sh, и теперь все работает отлично:

# Check if LightDM has already arrived
systemctl status lightdm | grep "running"
not_running=$?
if (( $not_running > 0 ))
then
    # LightDM not arrived, exiting for now...
    echo "LightDM not arrived, won't switch GPU."
    exit
fi
0
28.04.2021, 23:41

Теги

Похожие вопросы