Oto treść /etc/network/interfaces
:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
post-up /etc/network/if-up.d/sshstart
I sshstart
jest skryptem z następującymi elementami:
curl something something darkside send a file over ftps in the background &
/usr/bin/autossh -M 0 -f -N -o ServerAliveInterval=15 -o ServerAliveCountMax=3 -R 127.0.0.1:2005:127.0.0.1:22 -R 192.168.1.10:2006:192.168.2.110:1912 -L 127.0.0.1:5249:192.168.1.212:5249 [email protected] -p 8080
Gdy komputer uruchomi się ponownie, curl
polecenie jest wykonywane wielokrotnie, plik kończy się 2 lub 3 razy na serwerze ftp, a kiedy patrzę na procesy, wydaje się, że jest wiele wystąpień autossh uruchomionych ... Nie jestem pewien, czy w ten sposób autossh robi rzeczy lub nie, ale na pewno curl nie powinien przesyłać pliku wiele razy.
Mam przeczucie, że cały sshstart
skrypt był uruchamiany wiele razy, ale nie rozumiem dlaczego.
Próbowałem szukać szczegółów na temat procesu konfiguracji sieci podczas rozruchu, ale jedyne, co mogłem znaleźć, to informacje o składni pliku interfejsów.
Czy ktoś może pomóc?
Dziękuję Ci.
--- Edytuj ---
Zgodnie z sugestią poniżej zmodyfikowałem plik interfejsów w następujący sposób (usunąłem puste linie powyżej post-up):
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
post-up /etc/network/if-up.d/sshstart
I dodał następujący wiersz do sshstart:
echo $(date)>>/run/shm/sshstart.log
Oto treść /run/shm/sshstart.log
ponownego uruchomienia:
Wed Oct 29 08:07:00 EDT 2014
Wed Oct 29 08:07:07 EDT 2014
Wed Oct 29 08:07:07 EDT 2014
Wed Oct 29 08:07:07 EDT 2014
Zostało to uruchomione 4 razy :( co się dzieje?
echo $(date)
jest dość niezręczne i pośrednie. Równie dobrze może to przeliterowaćdate
. Podobne do nagrody za bezużyteczne wykorzystanie kota .Odpowiedzi:
Pliki są
/etc/network/if-up.d
już uruchamiane automatycznie po pojawieniu się interfejsu (dowolnego interfejsu). Po określeniu, że ten sam skrypt ma być ponownie uruchamiany w jawnympost-up
poleceniu, powoduje to tylko ponowne uruchomienie skryptu. Domyślam się, że tak powinno się stać:lo
pojawi się (ze zmienną środowiskowąIFACE=lo
), ponieważ znajduje się w/etc/network/if-up.d
.eth0
pojawi się (ze zmienną środowiskowąIFACE=eth0
) z tego samego powodu.eth0
pojawia się (zIFACE
ustawioną zmienną środowiskową ), ponieważ poprosiłeś o to wpost-up
dyrektywie.Nie jestem pewien, skąd pochodzi czwarty raz, ale w każdym razie to już trzy.
Musisz albo zlokalizować skrypt gdzieś indziej i uruchomić go raz przy użyciu
post-up
dyrektywy, albo zostawić tam, gdzie jest, ale nie wspominaj o nim wpost-up
dyrektywie i sprawdź wartość,$IFACE
aby nic nie robiło, chyba że pojawi się żądany interfejs (eth0
) w górę.źródło
--all
. Wygląda na to, że istnieje funkcja, aby uruchomićif-up.d
skrypty po raz ostatni z tym argumentem, aby zasygnalizować, że wszystkie interfejsy są już uruchomione, na wypadek, gdyby jakiś skrypt chciał podjąć działanie, gdy okaże się, że nie ma żadnych dalszych interfejsów. To wyjaśnia czwarty raz.Jak stwierdził Celada,
/etc/network/if-up.d
skrypty są uruchamiane dla każdego interfejsu. Aby uniknąć powielania reguł, po prostu dodaj:u góry skryptu. Spowoduje to natychmiastowe zamknięcie skryptu, jeśli interfejs nie jest pożądany.
źródło
Usuń pustą linię przed
post-up
poleceniem. To powinno odnosićpost-up
sięeth0
tylko do polecenia . Dodatkowo przenieś skrypt zif-up.d
folderu. Skrypty w tym folderze są wykonywane automatycznie, bez względu na to, czy są zdefiniowane jakopost-up
. W twoim przypadku będzie działał dodatkowo do twojegopost-up
polecenia.źródło