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?


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

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.

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).


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 :)


8
rc.localjest uruchamiany jako root, więc hasło nie jest konieczne.
enzotib
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.