🕹️ Jak uruchamiać usługi lub kontenery tylko gdy host jest dostępny – systemd + ping + docker
Czasami chcemy, aby konkretna usługa (np. kontener Docker, backup, rsync lub mount NFS) startowała dopiero wtedy, gdy zdalny host (np. serwer, NAS, baza danych) odpowiada. W Linuksie możemy to osiągnąć przy pomocy systemd i prostego skryptu z ping.
Ten mechanizm:
- zapobiega błędom uruchomienia zależnych usług,
- zmniejsza liczbę restartów kontenerów i logów błędów,
- pozwala na warunkowe uruchamianie usług tylko przy dostępności sieci.
🎯 Przykład celu:
Uruchom kontener Dockera db-backup tylko, gdy host 192.168.1.10 (serwer z bazą) odpowiada na ping.

🧾 Krok 1: Skrypt sprawdzający hosta
Utwórz skrypt, który pinguje host i uruchamia usługę tylko gdy host jest dostępny:
sudo nano /usr/local/bin/hostcheck.sh
Zawartość:
#!/bin/bash
TARGET="192.168.1.10"
COUNT=3
if ping -c $COUNT -W 2 $TARGET > /dev/null; then
docker start db-backup
else
echo "$(date): $TARGET niedostępny, pomijam uruchomienie kontenera"
fi
Ustaw prawa:
chmod +x /usr/local/bin/hostcheck.sh
🔧 Krok 2: Usługa systemd
Utwórz jednostkę .service, która będzie oparta na tym skrypcie:
sudo nano /etc/systemd/system/db-backup-check.service
Zawartość:
[Unit]
Description=Sprawdzenie hosta i uruchomienie kontenera db-backup
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/hostcheck.sh
[Install]
WantedBy=multi-user.target
🔁 Krok 3: Automatyczne uruchamianie po starcie systemu
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable db-backup-check.service
Możesz uruchomić ręcznie:
sudo systemctl start db-backup-check
🔄 Alternatywa: automatyczne próby co X minut – systemd.timer
Stwórz plik timera:
sudo nano /etc/systemd/system/db-backup-check.timer
Zawartość:
[Unit]
Description=Co 10 minut sprawdzaj dostępność hosta
[Timer]
OnBootSec=1min
OnUnitActiveSec=10min
Unit=db-backup-check.service
[Install]
WantedBy=timers.target
Aktywuj:
sudo systemctl enable --now db-backup-check.timer
🛠️ Możliwe rozszerzenia
- mount zasobu NFS tylko, gdy serwer jest dostępny
- rsync danych z hosta tylko przy połączeniu
- uruchamianie backupu do lokalizacji sieciowej
- startowanie LXC/Docker/Podman po warunku
ping - integracja z monit lub fail2ban
🔒 Bezpieczeństwo
- Używaj
ping -cz ograniczoną liczbą prób - Ogranicz dostęp do skryptu tylko dla root/admin
- Możesz dodać logowanie do systemd journal
✅ Podsumowanie
Taka konfiguracja:
✔️ pozwala na warunkowe uruchamianie usług,
✔️ poprawia stabilność systemu,
✔️ eliminuje błędy wynikające z braku dostępności hostów,
✔️ jest bardzo elastyczna i łatwa do rozbudowy.






