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?
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.
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 4192010-08-2711:26/etc/rc.local
Upewnij się, że rc.local ma linię shebang (która jest domyślna):
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
Umieść cały kod wykonawczy w osobnym pliku tekstowym o dowolnej nazwie, np. Foo.sh, i zapisz go w dowolnym miejscu.
Dodaj
#!/bin/sh
jako pierwszy wiersz twojego kodu.
Spróbuj uruchomić plik foo.sh przez
sudo foo.sh
aby sprawdzić, czy nie ma żadnych błędów.
Podaj skryptowi /etc/rc.local pełną ścieżkę i nazwę utworzonego skryptu po poleceniu sh
sh '/path/to/your/script/foo.sh'
Pamiętaj, aby umieścić powyższą linię przed ostatnim wierszem kodu
exit 0
na końcu skryptu /etc/rc.local.
Sprawdź pierwszą linię pliku /etc/rc.local
#!/bin/sh -e
Uczyń swój plik /etc/rc.local wykonywalnym na wypadek, gdyby nie był jeszcze wykonywalny
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
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).
systemctl status rc-local.service
echo $PATH > /home/rc_local_path
swój, umieszczając go w / etc / rc.local, a następnie sprawdzenie pliku po uruchomieniu podczas uruchamiania.rc.local
pliku!sudo systemctl enable rc-local.service
aby upewnić się, że/etc/rc.local
jest wykonywana podczas uruchamiania serweraOdpowiedzi:
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.
Upewnij się, że rc.local ma linię shebang (która jest domyślna):
źródło
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
Dodaj
jako pierwszy wiersz twojego kodu.
Spróbuj uruchomić plik foo.sh przez
aby sprawdzić, czy nie ma żadnych błędów.
Podaj skryptowi /etc/rc.local pełną ścieżkę i nazwę utworzonego skryptu po poleceniu sh
Pamiętaj, aby umieścić powyższą linię przed ostatnim wierszem kodu
na końcu skryptu /etc/rc.local.
Sprawdź pierwszą linię pliku /etc/rc.local
Uczyń swój plik /etc/rc.local wykonywalnym na wypadek, gdyby nie był jeszcze wykonywalny
Sprawdź, czy wszystko działa poprawnie, wykonując
źródło
sudo /etc/rc.local start
pierwszym razem.W nowszych wersjach Ubuntu
systemd
jest używana i/etc/rc.local
nie zawsze jest ładowana domyślnie.Sprawdź, czy usługa zgodności jest załadowana
Jeśli zawiera aktywne (opuszczone) ustawienie wydaje się być prawidłowe i może występować kolejny błąd w
/etc/rc.local
pliku (może to być na przykład polecenie, które się nie powiedzie).źródło
2 sugestie.
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 :)
źródło
rc.local
jest uruchamiany jako root, więc hasło nie jest konieczne.