Jak mogę uruchomić skrypt podczas uruchamiania na komputerze Ubuntu Server 17.10? Myślę, że metoda została zmieniona w 17.10.
źródło
Jak mogę uruchomić skrypt podczas uruchamiania na komputerze Ubuntu Server 17.10? Myślę, że metoda została zmieniona w 17.10.
Umieść skrypt w odpowiedniej cron
tabeli użytkownika (tj. Crontab ) z harmonogramem @reboot
.
Użytkownik może edytować swoją cron
tabelę za pomocą crontab -e
.
Przykład, który uruchomi się /path/to/script.sh
przy starcie:
@reboot /path/to/script.sh
Jeśli chcesz uruchomić go jako root, nie używaj @reboot sudo /path/to/script.sh
;
służy sudo crontab -eu root
do edycji crontab roota.
Zobacz też: crontab (1), cron (8), crontab (8)
Ubuntu 15.04 i nowsze domyślnie używają czegoś zwanego systemd
, co jest rodzajem programu, który automatyzuje usługi i procedury uruchamiania. Możesz stworzyć własny i dodać go do listy usług startowych przy odrobinie wysiłku.
Podstawowa usługa systemowa
To jest .service
plik barebones , który mógłby zostać użyty do uruchomienia mojego serwera GUI Pythona (mógł być skryptem powłoki, to nie ma znaczenia):
[Unit]
Description=Python GUI Server
[Service]
ExecStart=/home/pi/software/GUI_POE.py &
[Install]
WantedBy=multi-user.target
Description
Opcja jest dowolny ciąg znaków, który opisał, co jest usługą lub nie.
ExecStart
Opcja określa polecenie do wykonania. Podaję ścieżkę do wykonywalnego skryptu python i używam &
tokena, aby uruchomić go w tle.
Ta WantedBy
opcja określa pierwszeństwo na podstawie celu, który chce korzystać z tej usługi. Jeśli nie potrzebujesz, aby Twoja usługa działała w określonym momencie, po prostu ustaw ją na multi-user.target
.
Podstawowa procedura
Napisz skrypt, który chcesz uruchomić przy starcie, za pomocą nano
dowolnego edytora. Upewnij się, że umieściłeś właściwy shebang na samej górze pliku ( #!/bin/bash
dla skryptów bash) i nadałeś mu uprawnienia do wykonywania chmod
.
Po prostu napisz swoją usługę w pliku o nazwie my_service.service, a następnie skopiuj ją do odpowiedniego directoy za pomocą cp my_service.service /lib/systemd/system/
.
Zacznij swoją usługę: sudo systemctl start my_service.service
. Spowoduje to uruchomienie dowolnego skryptu, który chcesz uruchomić. To samo polecenie z „stop” zamiast startu wyłączy je.
Dodaj swoją usługę do procesu rozruchu: sudo systemctl enable my_service.service
. Aby go usunąć, po prostu zamień „włącz” na „wyłącz” w tym samym poleceniu.
I to wszystko! Należy pamiętać, że skrypt będzie uruchamiany automatycznie z uprawnieniami administratora, ponieważ jest to domyślne w usługach systemowych.
Mój prosty przykład (pełny)
Dla porównania, oto prosta usługa systemowa, którą mam, która uruchamia prosty serwer GUI Pythona za pomocą Dash:
[Unit]
Description=Python GUI Server
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/home/pi/software
ExecStart=/home/pi/software/GUI_POE.py &
Restart=always
RestartSec=15s
KillMode=process
TimeoutSec=infinity
User=pi
Group=pi
[Install]
WantedBy=multi-user.target
Ta przykładowa usługa używa skryptu Python3, ale formuła jest dokładnie taka sama dla skryptu powłoki.
Więcej lektur można znaleźć w tym doskonałym tutorialu DigitalOcean oraz w tym wątku AskUbuntu z doskonałą odpowiedzią, która pomogła mi nauczyć się systemd. Mam nadzieję że to pomoże!