Próbuję skonfigurować nową usługę (pod Debian Jessie), która musi skonfigurować niektóre instalacje, w których przechowywana jest konfiguracja sieci, a zatem ta usługa musi zostać ukończona przed uruchomieniem usługi networking.service.
Próbowałem następujące:
[Unit]
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
#Before=network-pre.target
Before=networking.service
[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes
[Install]
RequiredBy=networking.service
Za pomocą systemd-analyze plot
Widzę, że moja usługa się uruchamia, ale networking.service
zaczyna się około 3 sekund wcześniej:
Najwyraźniej moja konfiguracja jest nieprawidłowa, ale trudno mi znaleźć problem ... Każda pomoc bardzo doceniona ..
Aktualizacja
I obecnie rozwiązany przez zmianę config usług zacząć przed local-fs.target
zamiast networking.service
:
[Unit]
DefaultDependencies=no
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
Before=local-fs.target
[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes
[Install]
RequiredBy=local-fs.target
Chciałbym jednak zrozumieć, dlaczego moja pierwsza konfiguracja nie działała zgodnie z oczekiwaniami ...?
/etc/network/interfaces
ma odniesienia doip-up
skryptów znajdujących się na innej partycji. Ta partycja jest montowana za pomocą skomplikowanego skryptu,/opt/intermodul-mounts/start.sh
który należy uruchomić przed skonfigurowaniem sieci. Obecnieip-up
skrypty faktycznie się nie uruchamiają, ponieważ nie są dostępne w czasie uruchamiania. Uruchamianieservice networking restart
potem przywołuje wszystkich interfejsów poprawnie.Odpowiedzi:
Chcesz użyć,
network-pre.target
jeśli chcesz coś skonfigurować przed uruchomieniem sieciPowinieneś umieścić je w
[Unit]
sekcji:Odniesienie
źródło
systemctl is-enabled <unit>
brzmi zawszestatic
. Oczywiście nie mogę tego włączyć, ponieważ nie maWantedBy=
. W końcu czego chce? Jest to coś, co wymaga pewnej konfiguracji, zanim sieć się załaduje.Before=network-pre.target
iWants=network-pre.target
a dla[Install]
zrobiliśmyWantedBy=network.target
. Ostatnia sekcja zmusiła go do pracy w sieci, poprzednia uporządkowała. Był to jednak bólTak jak w Debian Jessie, pakiet netfilter-persistent (umożliwiający ładowanie reguł iptables przed uruchomieniem sieci) ma pakiet netfilter-persistent.service, który wygląda następująco:
źródło
shutdown.target
!Błąd jest prosty i jedną z głównych rzeczy, które zawsze mylę: miksujesz
Before
iRequiredBy
. To nie idzie w parze. Inni mają rację co do celu.źródło
Wykonanie czegoś w ten sposób zapewni, że to urządzenie uruchomi się przed siecią, ale po większości innych ważnych ustawień.
źródło