To pytanie zostało zadane już kilka razy wcześniej, ale wydawało mi się, że nie działało na podstawie istniejących informacji.
My Pi prowadzi Raspbian. Mam skrypt w języku Python o nazwie dnscheck.py, który zapętla się na zawsze.
Potrzebuję go do uruchomienia podczas rozruchu. Wiem, że muszę utworzyć plik .sh zawierający coś takiego
sudo python dnscheck.py &
Nie wiem, gdzie powinien być ten plik lub czy powinien on zawierać coś jeszcze. Wiem o folderze init.d, ale widząc przykład szkieletu, wyobrażam sobie, że powinien istnieć prostszy sposób na wykonanie tego prostego zadania.
Odpowiedzi:
Jeśli chcesz kontrolować proces za pomocą poleceń takich jak start, stop, restart itp. Za pomocą skryptu szkieletowego i modyfikowanie go do własnych celów może być najlepszą opcją.
Jeśli chcesz, aby proces się rozpoczął, wstaw polecenie do
/etc/rc.local
. (Nie mam pod ręką moich RPi, ale czytam online, że jest tam linia wyjścia 0, powinieneś umieścić swoje polecenie powyżej tej linii)źródło
rc.local
uruchamia się root. Oczywiście należy również podać pełną ścieżkę do skryptu. Powinieneś także dodać&
na końcu, aby skrypt rozwidlał, np/path/to/foobar.py &
.&
? Ponieważ gdy używam bez niego, wszystko nadal działa zgodnie z oczekiwaniami.Przenieś skrypt (zapiszemy go do pliku
dnscheck
)/etc/init.d/
i ustaw uprawnienia, aby można go było uruchomić:Dodaj tagi inicjujące LSB na początku skryptu. Prawdopodobnie będziesz chciał zmienić Wymagany Start / Stop i tagi opisu, aby pasowały do twojego skryptu.
Następnie utwórz dowiązania symboliczne, uruchamiając
źródło
/etc/rc.local
jest niewystarczające.Oczywiście można to zrobić na wiele sposobów, ale nie zapomnij o użyciu
cron
. Jeśli umieścisz@reboot
wiersz w swoim crontabie, to polecenie będzie wykonywane przy każdym restarcie.Aby przetestować, właśnie dodałem następujący wiersz do mojego crontab użytkownika
crontab -e
:@reboot echo "$(date)" >> ~/boot.txt
Dodatkową zaletą tej metody jest to, że możesz wywoływać zadanie zgodnie z wymaganiami w innych odstępach czasu poza czasem uruchamiania i nie musisz edytować skryptów inicjujących.źródło
jeśli używasz pliku rc.local, może to być pomocne przy rozwiązywaniu problemów. Możesz dodać wiersze rejestrowania do błędów dziennika (stderr) i dane wyjściowe polecenia (stdout) do pliku dziennika. Zgodnie z tym przykładem plik zapisuje się w /tmp/rc.local.log
Czytaj dalej
źródło
Jestem naprawdę zaskoczony, że daemontools djb nie jest tutaj wymienione. Daemontools zapewnia właściwy nadzór procesu i możesz dodawać fajne funkcje, takie jak automatycznie obracane rejestrowanie. TL; DR, jeśli nie jesteś zaznajomiony z tym, proces zostanie zrestartowany za każdym razem, gdy się nie powiedzie, i rozpocznie się automatycznie po włączeniu Pi. Jest to świetne, jeśli napisałeś zły program python, który ma tryby awarii, ale nie chcesz, aby umarł po wystąpieniu błędu.
Zainstalować:
Następnie wykonaj kroki, aby utworzyć procesy demonizowane:
Jest to w większości tak proste, jak skopiowanie
run
skryptu na/etc/service/<my_custom_service_name>
inny profit: możesz uruchomić jako dowolny użytkownik lub root! Szczegóły w linku.FWIW Miałem projekt Pi, w którym miałem 3 różne procesy Pythona (każdy z nich miał pętlę wykonawczą wykorzystującą czas procesora, więc używając 3 procesów pozwoliłem każdemu procesowi wykorzystać 1 rdzeń procesora). Daemontools pozwolił mi upewnić się, że wszystkie 3 będą działać automatycznie i pozostaną uruchomione po podłączeniu Pi.
źródło
Oto rozwiązanie, z którego ciągle korzystam.
Utwórz plik na pulpicie
wpisz w nim następujące
wklej ten plik do
i zrestartuj Raspberry Pi. Powinno ono automatycznie uruchomić Twój program w nowym terminalu
źródło
Aby użyć pliku .py, po prostu umieść wiersz
#!/usr/bin/python
na samym początku pliku. Następnie uczyń go wykonywalnym za pomocąchmod +x filename
. Następnie dodać linię/path/to/file.py &
do/etc/rc.local
przedexit 0
linią (zamiana/path/to/file.py
ze ścieżką do skryptu). Spowoduje to wykonanie skryptu Pythona po zakończeniu rozruchu.źródło
Oto jeszcze łatwiejsza metoda, która zadziałała dla mnie. Zmodyfikuj autostart w LXDE.
Otwórz terminal i edytuj plik autostartu w następujący sposób:
dodaj następujący wiersz tekstu na dole (odpowiednio zmodyfikuj ścieżkę do miejsca, w którym znajduje się plik example.py)
ctr-x i zapisz. Może być konieczne wykonanie skryptu python w następujący sposób:
odwołanie do autostartu w LXDE i odniesienie do uczynienia Pythona wykonywalnym
źródło
te rozwiązania nie działały dla mnie, próbując uruchomić skrypt Pythona z uruchomionym Feh. Następujące działało. Uruchamia skrypt po zalogowaniu.
Otwórz sesję terminala i edytuj plik
sudo nano /etc/profile
Dodaj następujący wiersz na końcu pliku
/home/pi/your_script_name.sh
zastąp nazwę i ścieżkę skryptu poprawną nazwą i ścieżką skryptu startowego. Zapisz i wyjdź
Naciśnij Ctrl + X, aby wyjść z edytora nano, a następnie Y, aby zapisać plik.
Oto jak wyglądał mój skrypt.sh:
Myślę, że wykonałem zarówno skrypt.sh, jak i skrypt.py za pomocą chmod
źródło