Używam Debian 7 Wheezy i muszę uruchomić kilka ekranów przy starcie, jak tylko będzie w pełni funkcjonalne połączenie z Internetem. Jednak nie, jeśli połączenie internetowe uległo zerwaniu i zostało ponownie połączone. Tak więc tylko przy pierwszym funkcjonalnym połączeniu internetowym po uruchomieniu.
Czy mógłbyś napisać do tego fikcyjny skrypt i powiedzieć mi, gdzie go umieścić i aby został wykonany w podanych warunkach?
Skrypt musi tylko uruchomić ekran, a następnie zakończyć, ale ekran powinien być kontynuowany.
EDYCJA
Słyszałem już o /etc/network/if-up.d/
folderze. Ale jak mogę się upewnić, że skrypt nie zostanie ponownie wykonany, jeśli połączenie internetowe zostanie utracone, a następnie ponownie ustanowione?
debian
networking
startup
MinecraftShamrock
źródło
źródło
Odpowiedzi:
Włóż skrypt
/etc/network/if-up.d
i wykonaj go. Będzie uruchamiany automatycznie za każdym razem, gdy pojawi się interfejs sieciowy.Aby działał tylko przy pierwszym uruchomieniu przy każdym uruchomieniu, sprawdź, czy plik flagi jest tworzony po raz pierwszy. Przykład:
źródło
/var/run
jest niestabilny system plików (atmpfs
). Gwarantuje to, że przy każdym świeżym bucie będzie puste.python -c 'import os; os.open("/var/run/work-was-already-done", os.O_EXCL|os.O_CREAT, 0)' 2>/dev/null || exit 0
IFACE
to nie jestlo
- lub jakiś interfejs wirtualny - lub lepiej, przetestuj połączenie z Internetem za pomocą polecenia ping.$IFACE
może mieć jako wartość każdy interfejs, który się pojawi. Możesz wyświetlić listę wszystkich istniejących interfejsówip link
lub sprawdzić, które z nich są skonfigurowane do uruchomienia przez skanowanie/etc/network/interfaces
Jest to praca bardzo dobrze dostosowana
systemd
.Uruchamianie skryptu jako usługi systemowej
Jeśli system działa systemd , możesz skonfigurować skrypt, aby działał jako usługa systemd, która zapewnia kontrolę nad cyklem życia i środowiskiem wykonawczym, a także warunki wstępne uruchomienia skryptu, takie jak sieć działająca.
Zalecanym folderem dla własnych usług jest
/etc/systemd/system/
(inna opcja jest/lib/systemd/system
taka, ale zwykle powinna być używana tylko dla usług OOTB).Utwórz plik np. Za pomocą
sudo vim /etc/systemd/system/autossh.service
:Teraz możesz przetestować usługę:
Sprawdzanie statusu usługi:
Zatrzymywanie usługi:
Po sprawdzeniu, że usługa działa zgodnie z oczekiwaniami, włącz ją za pomocą:
źródło
Połączenie internetowe jest
/etc/rc6.d/
prawdopodobnie wywoływane przez wpis wS35networking
. Jeśli zmienisz ten plik i wstawisz polecenia na końcu, lub lepiej dodasz do niego/etc/init.d/mystuff
link/etc/rc0.d/S36mystuff
i i wstawisz tam swoje polecenia, to rozpocznie się, gdy tylko sieć się uruchomi.źródło
/etc/network/if-up.d
/etc/rc0.d
zauważyć , że żaden skrypt nie będzie uruchamiany podczas uruchamiania, będą one uruchamiane podczas zamykania (poziom uruchamiania 0). Podczas uruchamiania będzie to coś/etc/rc2.d
podobnego lub podobnego. Specjalnie dla wheezzy OP Debiana/etc/rcS.d/S12networking
. Oczywiście wszystkie dowiązania symboliczne do tego samego pliku. Również BTW @Anthon dziękuję za ustalenie mojej odpowiedzi: „Proszę” zamiast „Put”? Co za dziwna literówka!if-up.d
jako ogólny mechanizm, który działa również przy ponownym połączeniu.