Как заставить сервис включиться строго при наличии доступа в Интернет?

Столкнулся с проблемой. У меня есть сервис, который должен стартовать из systemd при загрузке. Заставить его загружаться при относительно штатной загрузке, а также из-под emergency mode я смог. Но дело в том, что он стартует раньше сетевых демонов systemd, которые выдают доступ в Интернет. А моему демону желательно стартовать строго после них

[Unit]
Description=Nothing
[Service]
ExecStart=/root/systemd/main
Type=simple
User=root
Group=root
After=networking.service NetworkManager-wait-online.service
[Install]
WantedBy=multi-user.targer emergency.target

cmdline такой, так что я вижу логи:

linux /boot/vmlinuz-5.16.7 ro

И мой сервис стартует до запуска сетевых сервисов. Как это исправить - либо из самого systemd, либо как проверить выход в Интернет на C++ (исполняемый файл - C++ программа)?


Ответы (1 шт):

Автор решения: eri

After строчка пишется в раделе [Unit], но возможно Вам нужен Requires

[Unit]
Description=Nothing
Requires=NetworkManager-wait-online.service

[Service]

Проверку реального интернета проще сделать на bash скрипте и поставить его в ExecPre=/usr/local/bin/check-online.sh

#!/bin/bash
while ! wget -O/dev/null http://gstatic.com/generate_204; do sleep 10; done;

Можно использовать ping или дёргать ресурс вашего приложения

→ Ссылка