Я запускаю набір серверів на основі 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-online.target
щоб це було доступно, але це перериває процес завантаження до тих пір, поки мережеве з'єднання не буде доступне, а це не працює
while(!network_available){sleep 1}
(псевдо-код). Таким чином ваш сценарій буде діяти лише після запуску мережі.
network.target
іnetwork-online.target
? На сторінці вік-системи systemd сказано, що потрібно додати залежність відnetwork-online.target
і не згадуватиnetwork.target
.