Jak mogę uruchomić skrypt bash w tle?
Uczę się pisania skryptów bash i właśnie stworzyłem krótki projekt, aby powiadomić mnie (za pomocą notify-send), gdy moja bateria jest rozładowana lub naładowana.
Chciałbym kilka sugestii, jak uruchomić ten skrypt bez pokazywania terminala. Moim pomysłem jest dodanie go w oprogramowaniu "Startup Applications", aby uruchamiał się podczas uruchamiania systemu, ale nie chcę pokazywać terminala, tylko po to, aby działał w tle.
Odpowiedzi
Możesz skonfigurować usługę systemd.
Możesz utworzyć plik (jako sudo) za pomocą swojego ulubionego edytora (nano, vim itp.), Takiego jak:
sudo nano /etc/systemd/system/myexecuteable.service
Powinien zawierać co najmniej następujące informacje:
[Unit]
Description=start my executable after multi-user target
[Service]
Type=simple
ExecStart=/path/to/my/executable
[Install]
WantedBy=multi-user.target
Aby upewnić się, że usługa uruchomi się po ponownym uruchomieniu, wykonaj: sudo systemctl enable myexecutable.service
Ta usługa będzie działać nieprzerwanie, jeśli bash ma jakąś pętlę. Jeśli ten plik wykonywalny ma jakieś wyjście (użyj "loggera do tego w pliku bash), możesz to sprawdzić w dowolnym momencie używającjournalctl -u myexecutable.service
Skrypt można uruchomić w tle z wiersza poleceń w następujący sposób:
$ ./myscript.sh &
Innymi słowy, dołącz &do polecenia.
Powiedziałeś, że chcesz uruchomić ten skrypt „bez pokazywania terminala”. Myślę, że można to zrobić na dwa sposoby:
stworzyć
systemdusługę - jak w tej odpowiedziuruchom skrypt jako
cronzadanie po uruchomieniu systemu:
Aby skonfigurować cronpracę, musisz utworzyć nowy crontabwpis.
Aby to zrobić, otwórz terminal i wpisz następujące polecenie:
$ crontab -e
Spowoduje to otwarcie twojego crontabw edytorze ( nanojest to dobry wybór dla redaktora). Kiedy jesteś w edytorze, dodaj następujący wiersz na końcu pliku:
@reboot /home/user/myscript.sh & >> /home/user/myscript.log 2>&1
Gdzie /home/user/myscript.shjest pełna ścieżka do pliku skryptu. Wszelkie dane wyjściowe skryptu zostaną przekierowane do pliku pod adresem /home/user/myscript.log. Pamiętaj, aby sprawdzić ten plik dziennika pod kątem wszelkich komunikatów o błędach.
Zapisz plik ( ^ o), jeśli używasz nano, i wyjdź z edytora ( ^ x).
Kilka rzeczy do zapamiętania:
Upewnij się, że
myscript.shjest plik wykonywalny .Jeśli używasz jakichkolwiek poleceń w programie
myscript.sh, upewnij się, że system wie, gdzie je znaleźć - tj. Użyj pełnej ścieżki do polecenia lub zadeklaruj PATH w swoim skrypcie.
Daj nam znać, jeśli masz dalsze pytania (napisz komentarz), a postaramy się pomóc.