Запустити сценарій, коли мережеве з'єднання встановлено


0

Я запускаю набір серверів на основі Debian Jessie і мені потрібен надійний спосіб завантажувати їх IP-адресу локальної мережі, коли мережеве посилання встановлено. Я написав сценарій, який це робить, і зареєстрував його як системну службу:

[Unit]
Description=Server Registration
Requires=network.target network-online.target
After=network.target network-online.target

[Service]
ExecStart=<script-location>
Type=simple
Restart=on-failure
WatchdogSec=21600

[Install]
WantedBy=multi-user.target

На жаль, якби це працювало так, як очікувалося, це не було б питанням про СО. Сценарій використовує routeкоманду для визначення мережевого пристрою, який використовується за замовчуванням, але не запускається, оскільки маршрут виходить через те, що мережа ще не працює. Крім того, система може завантажуватися без підключення до мережі і підключатися лише пізніше, тому сценарій потрібно запускати будь-коли, коли мережа піднімається.

Мережа налаштована за допомогою systemd-networkd.

Як я можу забезпечити запуск мого сценарію щоразу, коли мережа піднімається, а не раніше?


Ви впевнені, що вам потрібно вказати і те, network.targetі network-online.target? На сторінці вік-системи systemd сказано, що потрібно додати залежність від network-online.targetі не згадувати network.target.
VL-80

network.target відбувається перед network-online.target. Мені не обов’язково користуватися цим, це правда.
Емануель Ей

Якщо це не виправити, то є вирішення проблеми - змініть свій сценарій, щоб правильно обробити ситуацію "без мережі" і зачекайте, поки мережа підніметься.
VL-80

Тож мені насправді потрібно було дозволити, network-online.targetщоб це було доступно, але це перериває процес завантаження до тих пір, поки мережеве з'єднання не буде доступне, а це не працює
Емануель Ей

Так, документи говорять, що завантаження буде відкладено, поки мережа не стане доступною. Я б змінив сценарій, щоб перевірити наявність мережі в циклі, як while(!network_available){sleep 1}(псевдо-код). Таким чином ваш сценарій буде діяти лише після запуску мережі.
VL-80
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.