Jak mogę uruchomić skrypt bash w tle?

Oct 24 2020

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

1 kanehekili Oct 24 2020 at 20:57

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

1 Seamus Oct 24 2020 at 23:32

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:

  1. stworzyć systemdusługę - jak w tej odpowiedzi

  2. uruchom 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:

  1. Upewnij się, że myscript.shjest plik wykonywalny .

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