LINUX.ORG.RU

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

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

В какую сторону копать? Какие есть идеи?

Конечно, есть.

Но если перегрузить машину, сервис не стартует, ругаясь на «listen tcp 10.0.0.10:4242: bind: cannot assign requested address»

Скорее всего, это значит, что твой сервис запустился до того, как этот адрес появился на одном из интерфейсов. Без специального флага нельзя забиндить сокет на адрес, которого не существует в системе.

При этом если сразу после загрузки сделать sudo systemctl start hammer, то сервис стартует без проблем и работает.

Логично. Сеть-то уже поднята.

Прошу подсказать, если я пропустил что-то очевидное. В юнит-файле пробовал After=network.target или (как в логах ниже) After=netwotrk-online.target. Также пробовал Require=(оба варианта). Результат одинаковый.

Как я понимаю, After=netwotrk-online.target означает, что мой сервис должен стартовать после того, как сеть гарантированно поднялась.

Да, но нет. network.target означает «сетевой менеджер запустился». Если твой сетевой менеджер назначает адреса асинхронно, то достижение этой цели ничего не значит.

network-online.target — это ближе к тому, что ты хочешь, но этот таргет магическим образом не работает. Для него нужна поддержка со стороны сетевого менеджера. Чем у тебя в системе управляется сеть?

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

В какую сторону копать? Какие есть идеи?

Конечно, есть.

Но если перегрузить машину, сервис не стартует, ругаясь на «listen tcp 10.0.0.10:4242: bind: cannot assign requested address»

Я полагаю, это значит, что твой сервис запустился до того, как этот адрес появился на одном из интерфейсов. Без специального флага нельзя забиндить сокет на адрес, которого не существует в системе.

При этом если сразу после загрузки сделать sudo systemctl start hammer, то сервис стартует без проблем и работает.

Логично. Сеть-то уже поднята.

Прошу подсказать, если я пропустил что-то очевидное. В юнит-файле пробовал After=network.target или (как в логах ниже) After=netwotrk-online.target. Также пробовал Require=(оба варианта). Результат одинаковый.

Как я понимаю, After=netwotrk-online.target означает, что мой сервис должен стартовать после того, как сеть гарантированно поднялась.

Да, но нет. network.target означает «сетевой менеджер запустился». Если твой сетевой менеджер назначает адреса асинхронно, то достижение этой цели ничего не значит.

network-online.target — это ближе к тому, что ты хочешь, но этот таргет магическим образом не работает. Для него нужна поддержка со стороны сетевого менеджера. Чем у тебя в системе управляется сеть?