Jak mogę uruchomić „rc.local” podczas uruchamiania?

75

Mam skrypt, który chciałbym uruchomić podczas uruchamiania systemu. Położyłem go na „rc.local”, ale to nie działa. Jak mogę go włączyć podczas uruchamiania?

Pedro
źródło
1
Gdzie jest polecenie xsetwacom? /etc/rc.local jest uruchamiany przy użyciu bardzo prostej ŚCIEŻKI podczas uruchamiania. Prawdopodobnie różni się od ŚCIEŻKI, którą zalogowałeś się na terminalu. W terminalu wpisz: type -p xsetwacom, a następnie zastąp polecenie „xsetwacom” w pliku /etc/rc.local pełną ścieżką zwróconą przez „type -p”. Czy musisz wykonać ręczne inicjalizacje, zanim xsetwacom będzie dla ciebie działał?
waltinator
3
Używając systemd jako menedżera uruchamiania, upewnij się, że działa kompatybilność rc.local:systemctl status rc-local.service
rubo77 21.04.16
komentarz waltinatora był moim problemem. Z powodu minimalnej ścieżki nie wiedziałem, jak uruchomić skrypty, które chciałem uruchomić. Ścieżka załadowana do mojego systemu Ubuntu 14.04 w czasie uruchamiania /etc/rc.local była następująca: / sbin: / usr / sbin: / bin: / usr / bin ... możesz sprawdzić echo $PATH > /home/rc_local_pathswój, umieszczając go w / etc / rc.local, a następnie sprawdzenie pliku po uruchomieniu podczas uruchamiania.
RaisinBranCrunch
Pamiętaj, że jeśli twój skrypt musi działać nieprzerwanie , musisz uruchomić go jako demon w rc.localpliku!
totymedli
Użyj, sudo systemctl enable rc-local.serviceaby upewnić się, że /etc/rc.local jest wykonywana podczas uruchamiania serwera
William

Odpowiedzi:

56

Czy możesz uruchomić skrypt ręcznie? Jeśli nie, to problem z tym skryptem; w przeciwnym razie spójrz bardziej na rc.local. (Jeśli ten skrypt musi być uruchamiany jako root, musisz użyć sudo, aby go uruchomić ręcznie).

Upewnij się, że plik /etc/rc.local jest wykonywalny, a skrypt, który wywołuje, jest również wykonywalny.

$ ls -l /etc/rc.local
-rwxr-xr-x 1 root root 419 2010-08-27 11:26 /etc/rc.local

Upewnij się, że rc.local ma linię shebang (która jest domyślna):

$ head -n1 /etc/rc.local
#!/bin/sh -e

źródło
Tak, mogę uruchomić skrypt ręcznie. Jak mogę się upewnić, że plik /etc/rc.local jest wykonywalny? Co mam wpisać? Czy to „$ ls -l /etc/rc.local -rwxr-xr-x 1”? Dzięki!
Pedro
@pedroo: Skopiowałem dokładnie to, co widzę w moim terminalu (więc powyższe monity, dane wejściowe i wyjściowe). Komenda brzmi „ls -l /etc/rc.local” i jeśli jest wykonywalna, będzie miała te X na wyjściu.
3
Wypróbowałem plik „ls -l /etc/rc.local” i jest on wykonywalny, ale nie mogę uruchomić go przy starcie ... Masz pomysł?
Pedro
1
@pedroo: To wymaga działania serwera X, co nie zdarza się, gdy rc.local wykonuje się. Uruchomienie go z rc.local sprawi, że zakończy się bez robienia czegokolwiek (chociaż mam nadzieję, że umieści komunikat w syslog lub gdzie indziej). Zamiast tego musisz umieścić polecenia xsetwacom w ~ / .xinitrc lub / etc / X / xinit / xinitrc.
1
@pedroo: Ponieważ rc.local zawiera polecenia przeznaczone do uruchomienia w innym czasie. Utwórz nowy plik, możesz go umieścić w ~ / bin , oznaczyć jako wykonywalny (chmod lub właściwości w Nautilusie), zrobić pierwszy wiersz „#! / Bin / bash”, a następnie umieścić swoje polecenia w późniejszych wierszach.
53

W moim przypadku żadna z instrukcji nie była idealnym rozwiązaniem. Jeśli miałeś tyle pecha co ja, wypróbuj ten szczegółowy

  1. Umieść cały kod wykonawczy w osobnym pliku tekstowym o dowolnej nazwie, np. Foo.sh, i zapisz go w dowolnym miejscu.
  2. Dodaj

    #!/bin/sh

    jako pierwszy wiersz twojego kodu.

  3. Spróbuj uruchomić plik foo.sh przez

    sudo foo.sh

    aby sprawdzić, czy nie ma żadnych błędów.

  4. Podaj skryptowi /etc/rc.local pełną ścieżkę i nazwę utworzonego skryptu po poleceniu sh

    sh '/path/to/your/script/foo.sh'
  5. Pamiętaj, aby umieścić powyższą linię przed ostatnim wierszem kodu

    exit 0

    na końcu skryptu /etc/rc.local.

  6. Sprawdź pierwszą linię pliku /etc/rc.local

    #!/bin/sh -e
  7. Uczyń swój plik /etc/rc.local wykonywalnym na wypadek, gdyby nie był jeszcze wykonywalny

    sudo chown root /etc/rc.local
    sudo chmod 755 /etc/rc.local
    
  8. Sprawdź, czy wszystko działa poprawnie, wykonując

    sudo /etc/init.d/rc.local start
  9. Testuj ponownie uruchom system.
shvahabi
źródło
6
Krok 8 był kluczem do sprawdzenia, czy skrypt będzie działał w środowisku startowym. W moim przypadku muszę podać pełną ścieżkę do polecenia.
Peter Gluck,
Prefekt i wielki krok po kroku, działa na centos, ale za sudo /etc/rc.local startpierwszym razem.
A1Gard
Dzięki - ten podział naprawdę mi pomógł i jak wyżej, krok 8 był dla mnie również kluczem! Bez tego nie przekieruje +1 (dla odniesienia, aplikacja węzła działająca na serwerze chmury bitnami używa wiecznie do ciągłego działania).
fidev
Krok 8 był dobrą wskazówką, ale myślę, że krok 7 mógł być tym, co naprawił mój. Próbowałem uruchomić skrypt za pomocą crona, aby otworzyć tunel, ale
zawiodło się
28

W nowszych wersjach Ubuntu systemdjest używana i /etc/rc.localnie zawsze jest ładowana domyślnie.

Sprawdź, czy usługa zgodności jest załadowana

systemctl status rc-local.service

zrzut ekranu

Jeśli zawiera aktywne (opuszczone) ustawienie wydaje się być prawidłowe i może występować kolejny błąd w /etc/rc.localpliku (może to być na przykład polecenie, które się nie powiedzie).

rubo77
źródło
4
jeśli rc-local.service nie jest aktywowany, sprawdź ten post, który wyjaśnia, jak włączyć /etc/rc.local z Systemd
yaitloutou
3

2 sugestie.

  1. Upewnij się, że docelowy plik skryptu jest również oznaczony jako wykonywalny.
  2. Czy skrypt docelowy uruchamia polecenie sudo ? Jeśli tak, możesz podać mu hasło sudo.

Mój błąd. Po prostu sprawdź jeden. Dzięki za korektę enzotib :)

Ankit
źródło
8
rc.localjest uruchamiany jako root, więc hasło nie jest konieczne.
enzotib