LINUX.ORG.RU

История изменений

Исправление intelfx, (текущая версия) :

systemd такого не умеет, потому что это достаточно сложно сделать в общем виде в рамках системы зависимостей.

Например, сделали мы юнит, состояние которого (active/inactive) «копирует» наличие дефолтного маршрута в системе. Итак, мы уходим в suspend, маршрут исчезает, но сообщение о его исчезновении не успевает дойти до обработчика, потому что Linux — не ОСРВ. Мы просыпаемся, и всё, приехали, получаем гонку между этим сообщением и срабатыванием таймера. Если таймер сработает раньше, то сначала запустится юнит, которому нужна сеть, а уже потом systemd осознает, что сети-то и нет.

Можно, конечно, заставить следить за нетлинком сам systemd, и тогда (наверное) за счёт разнообразных гарантий упорядоченности systemd поймает и обработает сообщение из нетлинка гарантированно раньше, чем событие от таймера. Но — если уйти в suspend, пнув ядро напрямую, то после пробуждения даже само ядро вообще может далеко не сразу обнаружить разрыв подключения. Так что это будет в любом случае не особо надёжно.

Поэтому я бы решил это, изменив сам скрипт так, чтобы он сам в случае отказа сети делал несколько попыток, или тихо завершался, или ждал появления маршрута самостоятельно. Так будет наиболее надёжно.

Исправление intelfx, :

systemd такого не умеет, потому что это достаточно сложно сделать в общем виде в рамках системы зависимостей.

Например, сделали мы юнит, состояние которого (active/inactive) «копирует» наличие дефолтного маршрута в системе. Итак, мы уходим в suspend, маршрут исчезает, но сообщение о его исчезновении не успевает дойти до обработчика, потому что Linux — не ОСРВ. Мы просыпаемся, и всё, приехали, получаем гонку между этим сообщением и срабатыванием таймера. Если таймер сработает раньше, то сначала запустится юнит, которому нужна сеть, а уже потом systemd осознает, что сети-то и нет.

Можно, конечно, заставить следить за нетлинком сам systemd, и тогда (наверное) за счёт разнообразных гарантий упорядоченности systemd поймает и обработает сообщение из нетлинка гарантированно раньше, чем событие от таймера. Но — если уйти в suspend, пнув ядро напрямую, то после пробуждения даже само ядро вообще может далеко не сразу обнаружить разрыв подключения. Так что это будет в любом случае не особо надёжно.

Поэтому я бы решил это, изменив сам скрипт так, чтобы он сам в случае отказа сети делал несколько попыток, или тихо завершался, или ждал появления маршрута самостоятельно.

Исправление intelfx, :

systemd такого не умеет, потому что это достаточно сложно сделать в общем виде в рамках системы зависимостей.

Например, сделали мы юнит, состояние которого (active/inactive) «копирует» наличие дефолтного маршрута в системе. Итак, мы уходим в suspend, маршрут исчезает, но сообщение о его исчезновении не успевает дойти до обработчика, потому что Linux — не ОСРВ. Мы просыпаемся, и всё, приехали, получаем гонку между этим сообщением и срабатыванием таймера. Если таймер сработает раньше, то сначала запустится юнит, которому нужна сеть, а уже потом systemd осознает, что сети-то и нет.

Можно, конечно, заставить следить за нетлинком сам systemd, и тогда (наверное) за счёт разнообразных гарантий упорядоченности systemd поймает и обработает сообщение из нетлинка гарантированно раньше, чем событие от таймера. Но — если уйти в suspend, пнув ядро напрямую, то после пробуждения даже само ядро вообще может далеко не сразу обнаружить разрыв подключения. Так что это будет в любом случае не особо надёжно.

Поэтому я бы решил это, изменив сам скрипт так, чтобы он сам в случае отказа сети тихо завершался.

Исправление intelfx, :

systemd такого не умеет, потому что это достаточно сложно сделать в общем виде в рамках системы зависимостей.

Например, сделали мы юнит, состояние которого (active/inactive) «копирует» наличие дефолтного маршрута в системе. Итак, мы уходим в suspend, маршрут исчезает, но сообщение о его исчезновении не успевает дойти до обработчика, потому что Linux — не ОСРВ. Мы просыпаемся, и всё, приехали, получаем гонку между этим сообщением и срабатыванием таймера. Если таймер сработает раньше, то сначала запустится юнит, которому нужна сеть, а уже потом systemd осознает, что сети-то и нет.

Можно, конечно, заставить следить за нетлинком сам systemd, и тогда (наверное) за счёт разнообразных гарантий упорядоченности systemd поймает и обработает сообщение из нетлинка раньше, чем сообщение от таймера. Но — если уйти в suspend, пнув ядро напрямую, то после пробуждения даже само ядро вообще может далеко не сразу обнаружить разрыв подключения. Так что это будет в любом случае не особо надёжно.

Поэтому я бы решил это, изменив сам скрипт так, чтобы он сам в случае отказа сети тихо завершался.

Исходная версия intelfx, :

systemd такого не умеет, потому что это достаточно сложно сделать в общем виде в рамках системы зависимостей.

Например, сделали мы юнит, состояние которого (active/inactive) «копирует» наличие дефолтного маршрута в системе. Итак, мы уходим в suspend, маршрут исчезает, но сообщение о его исчезновении не успевает дойти до обработчика, потому что Linux — не ОСРВ. Мы просыпаемся, и всё, приехали, получаем гонку между этим сообщением и срабатыванием таймера. Если таймер сработает раньше, то сначала запустится юнит, которому нужна сеть, а уже потом systemd осознает, что сети-то и нет.

А если уйти в suspend, пнув ядро напрямую, то после пробуждения даже ядро вообще может далеко не сразу обнаружить разрыв подключения.

Поэтому я бы решил это, изменив сам скрипт так, чтобы он сам в случае отказа сети тихо завершался.