Jak uruchomić skrypt bash podczas rozruchu

0

Wiem, że to pytanie zostało zadane kilka razy, ale po prostu nie mogę go uruchomić.

Oto kroki, które podjąłem, aby go uruchomić:

  1. napisał skrypt zapisany jako collection.sh
  2. przeprowadził się collection.shdo/etc/init.d
  3. wykonywane, $ sudo chmod 711 /etc/init.d/collection.shaby ustawić uprawnienia do wykonania skryptu
  4. wykonane w $ ln -s /etc/init.d/collection.sh /etc/rc0.d/celu utworzenia dowiązania symbolicznego w/etc/rc0.d
  5. ponownie uruchomiłem maszynę za pomocą $ sudo reboot

Te kroki zakończyły się niepowodzeniem collection.shpodczas uruchamiania. Czy ktoś może więc wskazać, co zrobiłem źle?

Pomyślałem, że może tworzę dowiązanie symboliczne w niewłaściwym rc?.dfolderze, ponieważ są rcfoldery 0-6 i S. Jeśli tak, w którym folderze należy go utworzyć?

JDOdle
źródło
Bez wiedzy o tym, co collection.shnależy zrobić lub czego się spodziewać, że to się nie powiedzie, na to pytanie nie można odpowiedzieć w obecnej formie.
JakeGould,

Odpowiedzi:

0

Robisz 3 rzeczy źle, co widzę.

Po pierwsze: chcesz umieścić swoje miękkie łącze, /etc/rcS.d/aby działało, gdy komputer przejdzie w tryb „pojedynczego użytkownika” (brak dostępu do sieci), i /etc/rc[2-5].d/aby było uruchomione, gdy urządzenie przejdzie w tryb „wielu użytkowników” (poziomy 2 do 5) . Poziom pracy 0 /etc/rc0.d/jest wprowadzany tylko wtedy, gdy maszyna ma zostać zamknięta. Runlevel 6 służy do „restartu”. Zobacz stronę wikipedii dla poziomów uruchomieniowych UNIX

Po drugie: nazwa softlink nie może być collection.sh. Musi mieć postać, w S09collectionktórej „S” oznacza Start, a „09” oznacza Start po uruchomieniu wszystkich 08 skryptów . Zobacz tutaj po więcej szczegółów.

Po trzecie: init służy do uruchamiania usług demona i nie powinien być używany do bezpośredniego uruchamiania collection.sh. Musisz utworzyć rzeczywisty skrypt inicjujący, który obsługuje uruchamianie i zatrzymywanie demona collection.sh. Przeanalizuj wcześniej istniejące skrypty inicjujące, /etc/init.d/aby poznać ich działanie. Alternatywnie, spójrz na poniższe linki, aby uzyskać więcej dokumentacji na temat pisania skryptów inicjujących.

  • Oto sposób pisania skryptów inicjujących zgodnych z LSB. Jest to zalecane w przypadku dystrybucji Linux zgodnych z LSB. Zauważyłem, że otagowałeś swoje pytanie słowem „ubuntu”, dlatego powinienem wspomnieć, że Ubuntu (podobnie jak wszystkie dystrybucje oparte na Debianie) jest zgodny z LSB.
  • Oto przewodnik wiki Debiana na temat tworzenia skryptów init zgodnych z LSB.
  • Oto „Szybki i brudny” sposób wykonywania skryptów inicjujących w stylu System V.
  • Oto szablon skryptu inicjującego w stylu System V na Github.

Nie musisz też tworzyć dowiązań symbolicznych bezpośrednio w /etc/rc?.dfolderach. Wszystkie główne dystrybucje mają do tego celu zautomatyzowane narzędzia. Zobacz ten artykuł, aby uzyskać więcej informacji.

użytkownik2121874
źródło
0

Trudno zrozumieć, dlaczego to nie działa bez obejrzenia skryptu, ale kroki, które podjęliście, wyglądają rozsądnie.

Mogą istnieć pewne możliwości wyjaśniające awarię

  • Nie masz czegoś takiego jak #! / Bin / bash jako pierwszego wiersza skryptu
  • Opierasz się na ścieżkach do plików binarnych, które nie zostały skonfigurowane.
  • Twój skrypt nie bierze pod uwagę, że skrypty startowe przekazują parametry takie jak start, stop, przeładowanie itp.

Inną metodą uruchamiania skryptu przy uruchamianiu (w przypadku większości dystrybucji) jest po prostu dodanie go do /etc/rc.local - ma to tę dodatkową zaletę, że działa jako ostatni, więc zostaną spełnione warunki wstępne.

Davidgo
źródło
0

Łącza symboliczne muszą być poprzedzone trzema znakami składającymi się z „S” dla startu lub „K” dla kill / stop, po którym następuje dwucyfrowa kolejność.

Większość dystrybucji zawiera taki program, update-rc.dktóry utworzy i usunie dowiązania symboliczne zgodnie z potrzebami. Wypróbuj polecenie, man -k rc.daby znaleźć dokumentację.

Możesz mieć szablon w swoim /etc/init.dkatalogu. Może zawierać specjalnie sformatowane komentarze, które mają dostarczyć parametry programu aktualizacji rd.d. Jeśli nie masz szablonu, prawdopodobnie masz tam prosty skrypt, którego możesz użyć jako szablonu.

Niektóre dystrybucje przechodzą na alternatywne metody przeprowadzania inicjalizacji. Sprawdź dokumentację dystrybucji.

BillThor
źródło