Obecnie próbuję zrozumieć różnicę między init.d
cron a @reboot
uruchamianiem skryptu podczas uruchamiania / uruchamiania systemu.
Użycie @reboot
(ta metoda została wspomniana na tym forum przez hs.chandra ) jest nieco prostsze, po prostu wchodząc crontab -e
i tworząc a, @reboot /some_directory/to_your/script/your_script.txt
a następnie your_script.txt
będzie wykonywane przy każdym ponownym uruchomieniu systemu. Szczegółowe wyjaśnienie @reboot
znajduje się tutaj
Alternatywnie, osadzając /etc/init.d/your_script.txt
w drugiej linii skryptu, tj .:
#!/bin/bash
# /etc/init.d/your_script.txt
Możesz uruchomić, chmod +x /etc/init.d/your_script.txt
co powinno również skutkować your_script.txt
uruchomieniem przy każdym uruchomieniu systemu.
P1: Jakie są kluczowe różnice między nimi?
P2: Który jest bardziej niezawodny?
P3: Czy jest lepszy z tych dwóch?
P4: Czy to jest właściwy sposób osadzania skryptu, który ma być uruchamiany podczas uruchamiania?
Będę zawierać plik .sh bash, który będzie uruchamiany podczas uruchamiania.
Odpowiedzi:
init.d
, znany również jako skrypt SysV, ma na celu uruchamianie i zatrzymywanie usług podczas inicjowania i zamykania systemu. (/etc/init.d/
skrypty są również uruchamiane w systemach obsługujących systemd w celu zapewnienia zgodności).start
istop
wiele więcej (zobacz zasady Debiana )crontab
(i dlatego@reboot
).@reboot
skrypt (nie tylko root)multi-user.target
./etc/rc.local
jest często uważany za brzydki lub przestarzały (przynajmniej przez redhat ), wciąż ma kilka fajnych funkcji:rc.local
była (prawie) ostatnia usługa do uruchomienia.rc.local
jest wykonywanynetwork.target
domyślnie po (nienetwork-online.target
!)Jeśli chodzi o systemd
network.target
inetwork-online.target
, przeczytaj Uruchamianie usług po uruchomieniu sieci .źródło
/var/run/crond.reboot
plik za każdym razem, jeśli chcę, aby zadania cron @reboot były wykonywane przy każdym uruchomieniu systemu. Jeśli ten plik istnieje @ zadania cron restartu nie zostaną wykonanePo pierwsze, należy wyjaśnić:
httpd
lubcron
Pod względem tego, czy lepiej używać,
rc.local
czycron
uruchamiać skrypt, podejrzewam, że jest to bardziej kwestia estetyki niż praktyczności.cron
, jako harmonogram zadań, ma służyć jako metoda przeprowadzania konserwacji lub konserwacji komputera, na przykład sprawdzania aktualizacji, czyszczenia pamięci podręcznej lub przeprowadzania audytów bezpieczeństwa. Nie oznacza to, że ogranicza się do wykonywania tych funkcji, ponieważ może uruchomić dowolny skrypt lub polecenie o określonej porze (np.@reboot
).rc.local
Z drugiej strony użycie bardziej odpowiadałoby zadaniu typu konfiguracji systemu, ponieważrc.local
wykonywane przez system inicjujący maszyny jest zazwyczaj odpowiedzialne za ustawienie konfiguracji sieci, usług lub środowisk maszyny (ale znowu nie jest ograniczone tylko do to zadanie).Oba te punkty należy jednak złagodzić faktem, że nie wszystkie systemy inicjujące oferują
rc.local
mechanizm i nie wszystkie demony cron oferują@reboot
znacznik psuedo.Punkty bonusowe
Jak wspomniano,
init.d
katalog zawiera skrypty sterujące usługami, które można uruchomić lub zatrzymać w systemie (przynajmniej na komputerach korzystających zSysV
systemu typu init). W zależności od systemu init i celu skryptu rozsądne może być przekonwertowanie skryptu na skrypt init, który będzie uruchamiany w taki sam sposób jak usługa. Jest to jednak w dużym stopniu zależne od systemu init, ponieważ struktura otaczająca sposób tworzenia tych plików może się znacznie różnić.Ostatnie słowo
Należy również zauważyć, że zazwyczaj skrypty bash kończą się sufiksem
.sh
zamiast.txt
, ponieważ natychmiast oznacza to, że plik jest skryptem powłoki zamiast pliku tekstowego. Biorąc to pod uwagę, pod warunkiem, że albo ma shebang (#!/bin/bash
) u góry pliku, albo jest wywoływane jakobash /path/to/script.whatever
, nie powinno mieć znaczenia pod względem wykonywania skryptu.źródło
bash
skrypty zwykle nie kończą się (i prawdopodobnie nie powinny) kończyć sięsh
rozszerzeniem..sh
zamiast.txt
” - konkretnie oznaczash
to, że jest dokładniejsze jako rozszerzenie nazwy pliku dla skryptów bash (lub innych skryptów powłoki), niżtxt
zwykle oznacza zwykły tekst. Możesz użyć dowolnego rozszerzenia, które wywołuje chichot, ale powszechna byłaby konwencja, jeśli użycie rozszerzeniash
byłoby bardziej odpowiednie i jest powszechnie stosowane; chociaż nie jest to wymagane, szczególnie w przypadku skryptów, które mają być wykonywane z poziomuPATH
.Piszę swoją odpowiedź poniżej;
Oprócz różnic wspomnianych przez innych użytkowników powyżej, chciałbym podkreślić, że @reboot jest zależny od demona crond. Jesteś zależny od kolejności uruchamiania crond. Chociaż większość przypadków, crond zaczyna się dobrze, ale czasem może się nie powieść (przynajmniej widziałem pewne awarie w niektórych moich projektach). Podczas pisania skryptu inicjującego błąd zwykle występuje, jeśli zrobisz coś złego w skrypcie (np. Poleganie na usłudze, która uruchomi się po Twojej usłudze)
W oparciu o powyższe myślę, że init jest bardziej niezawodny. Ale jest jeszcze jeden punkt wspomniany przez „Franklin Piat” w pierwszej odpowiedzi. Zwykle potrzebujesz skryptu inicjującego dla demona i powinieneś przestrzegać zasad
Nie sądzę (lokalna wersja językowa jest trochę stara i przestarzała)
Tak. Zwykle pisarze aplikacji / pakietów robią w ten sposób.
źródło