История изменений
Исправление 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, пнув ядро напрямую, то после пробуждения даже ядро вообще может далеко не сразу обнаружить разрыв подключения.
Поэтому я бы решил это, изменив сам скрипт так, чтобы он сам в случае отказа сети тихо завершался.