Jak uruchomić program Linux przy starcie z systemd

Opublikowany: 2022-01-29
Stylizowane okno terminala na laptopie.
Fatmawati Achmad Zaenuri/Shutterstock

Chcesz uruchomić program Linux przy starcie? Oprogramowanie systemd zapewnia sposób na zrobienie tego w dowolnej dystrybucji Linuksa z systemd - co jest obecnie większością z nich, w tym Ubuntu. Przeprowadzimy Cię przez proces tworzenia zintegrowanej usługi — a nawet rozmawia z dziennikiem.

Ten samouczek pokazuje, jak skonfigurować usługę systemową, która jest uruchamiana po uruchomieniu systemu. Aby uruchomić program graficzny podczas logowania, użyj menedżera uruchamiania na pulpicie.

Uruchamianie programów przy starcie

Czasami oprogramowanie, które instalujesz na komputerze, łączy się z procesem uruchamiania Linuksa, tak że program jest automatycznie uruchamiany przy każdym uruchomieniu komputera. Możesz łatwo osiągnąć to samo zachowanie za pomocą własnych programów i skryptów, a właściwie każdego innego programu, który jest na twoim komputerze.

Programy uruchamiane przy starcie są kontrolowane przez systemd , menedżera systemu i usług. systemd to pierwszy proces uruchamiany przy starcie. Zawsze ma identyfikator procesu (PID) 1. Każdy inny proces uruchomiony na twoim komputerze jest uruchamiany przez systemd lub przez proces, który systemd już został uruchomiony.

Programy działające w tle nazywane są demonami lub usługami. Litera „d” na końcu systemd oznacza demona. W tym artykule stworzymy przykładową usługę. Aby zaznaczyć wszystkie pola, nasza usługa musi być:

  • Zintegrowany z systemd poprzez plik jednostki usług
  • Uruchomiony przy starcie
  • Sterowanie za pomocą systemctl , interfejsu sterującego dla systemd
  • Potrafi pisać do dziennika

Tworzenie Programu Serwisowego

Potrzebujemy programu, który systemd uruchomi. Stworzymy prosty skrypt o nazwie „htg.sh”. Ten samouczek używa edytora tekstu Gedit, ale możesz użyć dowolnego edytora tekstu.

 dotknij htg.sh
 gedit htg.sh 

Reklama

Otworzy się edytor gedit . Skopiuj i wklej następujący tekst do edytora.

 #!/kosz/bash

echo "htg.service: ## Zaczynam ##" | systemd-cat -p informacje

dopóki :
robić
TIMESTAMP=$(data '+%Y-%m-%d %H:%M:%S')
echo "htg.service: znacznik czasu ${TIMESTAMP}" | systemd-cat -p informacje
spać 60
Gotowe

Zapisz zmiany i zamknij edytor.

Skrypt htg.sh w edytorze gedit

Scenariusz nie robi wiele, ale jest kilka punktów, na które warto zwrócić uwagę.

  • Dwie linie echo są przesyłane potokiem przez systemd-cat , program, który pobiera dane wyjściowe z programu i wysyła je do dziennika. Wpisy do czasopisma mają pierwszeństwo. Używamy opcji -p (priorytet), aby wskazać, że nasze wiadomości służą wyłącznie do celów informacyjnych (informacyjnych). Nie są to ważne błędy ani ostrzeżenia.
  • Istnieje nieskończona pętla while .
  • Zmienna TIMESTAMP jest ustawiona na bieżącą datę i godzinę. Jest to formatowane do postaci wiadomości i wysyłane do dziennika.
  • Skrypt następnie śpi przez 60 sekund.
  • Po 60 sekundach pętla się powtarza. Tak więc ten skrypt zapisuje wiadomość ze znacznikiem czasu do dziennika raz na minutę.

Skopiujemy skrypt do katalogu /usr/local/bin .

 sudo cp htg.sh /usr/local/bin 

I musimy sprawić, by był wykonywalny:

 sudo chmod +x /usr/local/bin/htg.sh 

Tworzenie pliku jednostki serwisowej

Każdy program uruchamiany przez systemd ma plik definicji, zwany plikiem jednostek usług. Zawiera to pewne atrybuty, których systemd może użyć do zlokalizowania i uruchomienia programu oraz do zdefiniowania niektórych jego zachowań.

Musimy utworzyć plik jednostki dla naszej nowej usługi, ale rozsądne jest upewnienie się, że żaden z istniejących plików jednostek nie ma nazwy, którą chcemy nadać naszej nowej usłudze.

 sudo systemctl list-unit-files --type-service 

Możesz przewijać listę plików jednostek, która jest posortowana alfabetycznie, i sprawdzić, czy nazwa, której chcesz użyć, nie jest zajęta.

Reklama

Nasz serwis będzie nosił nazwę „htg.service”. Żadne pliki jednostek nie mają takiej nazwy, więc możemy kontynuować i utworzyć nasz plik jednostek.

 sudo gedit /etc/systemd/system/htg.service 

Otworzy się edytor gedit . Skopiuj i wklej następujący tekst do edytora:

 [Jednostka]
Opis = Przykład usługi How-To Geek

Chce=sieć.cel
After=syslog.target sieć-online.target

[Usługa]
Typ=prosty
ExecStart=/usr/local/bin/htg.sh
Restart = w przypadku awarii
RestartSec=10
KillMode=proces

[Zainstalować]
WantedBy=wielu użytkowników.cel

Zapisz zmiany i zamknij edytor.

plik jednostki htg.service w edytorze gedit

Wpisy mają takie znaczenie. To są wpisy typowe. Nasza prosta usługa tak naprawdę nie potrzebuje większości z nich, ale uwzględnienie ich pozwala nam je wyjaśnić.

  • Opis: To jest tekstowy opis Twojej usługi.
  • Chce: Nasza usługa chce, ale nie wymaga, aby sieć była uruchomiona przed uruchomieniem naszej usługi.
  • Po: Lista nazw jednostek, które powinny zostać uruchomione po pomyślnym uruchomieniu tej usługi, jeśli nie są jeszcze uruchomione.
  • Typ: Prosty. systemd uzna tę usługę za uruchomioną, gdy tylko proces określony przez ExecStart zostanie rozwidlony.
  • ExecStart: ścieżka do procesu, który powinien zostać uruchomiony.
  • Restart: Kiedy i czy usługa powinna zostać ponownie uruchomiona. Ustawiliśmy go na „w przypadku awarii”.
  • RestartSec: czas oczekiwania przed próbą ponownego uruchomienia usługi. Ta wartość jest w sekundach.
  • KillMode: Określa, w jaki sposób systemd powinien zabić proces, jeśli poprosimy systemctl o zatrzymanie usługi. Mamy ten zestaw do „przetwarzania”. Powoduje to, że systemd używa sygnału SIGTERM tylko w procesie głównym. Jeśli nasza usługa byłaby nietrywialnym programem, a nie prostym skryptem, ustawilibyśmy to jako „mieszane”, aby zapewnić, że wszelkie odradzane procesy również zostaną zakończone.
  • WantedBy: Mamy to ustawione na „multi-user.target”, co oznacza, że ​​usługa powinna być uruchamiana tak długo, jak system jest w stanie, w którym wielu użytkowników może się zalogować, niezależnie od tego, czy jest dostępny graficzny interfejs użytkownika.

Plik jednostki nie musi być wykonywalny, ale uprawnienia do pliku jednostki powinny ograniczać, kto może go edytować. Nie chcesz, aby złośliwy lub złośliwy użytkownik zmienił plik jednostki tak, aby wykonał zupełnie inny program.

To polecenie nada właścicielowi uprawnienia do odczytu i zapisu oraz uprawnienia do odczytu dla grupy. Inni nie będą mieli uprawnień.

 sudo chmod 640 /etc/systemd/system/htg.service 

Możemy poprosić systemctl o sprawdzenie składni naszego pliku jednostki, nawet jeśli usługa nie jest jeszcze uruchomiona. Wszelkie błędy zostaną zgłoszone. (W rzeczywistości część „.service” jest opcjonalna dla większości poleceń.)

 systemctl status htg.service 

Reklama

Żadne błędy nie są podświetlone, co oznacza, że ​​nasz plik jednostki jest poprawny składniowo.

Uruchomienie usługi

Kiedy dodajesz nowy plik jednostek lub edytujesz już istniejący, musisz nakazać systemd ponowne wczytanie definicji plików jednostek.

 sudo systemctl demon-reload

Jeśli chcesz, aby usługa była uruchamiana przy starcie, musisz ją włączyć :

 sudo systemctl włącz htg

Włączenie usługi nie uruchamia jej, ustawia ją tylko tak, aby była uruchamiana w czasie rozruchu. Aby uruchomić usługę teraz , musisz użyć systemctl z opcją start .

 sudo systemctl start htg 

Weryfikacja usługi

Po ręcznym uruchomieniu usługi lub po ponownym uruchomieniu komputera możemy zweryfikować, czy nasza usługa działa poprawnie.

 sudo systemctl status htg.service 

Wyświetlany jest dla nas status usługi.

Status htg.service w oknie terminala

  • Zielona kropka oznacza, że ​​nasza usługa działa i działa sprawnie.
  • Nazwa usługi to „htg.service”, a długi opis to ten, który podaliśmy w pliku jednostki.
  • Pokazano nam, który plik jednostki został załadowany „/etc/systemd/system/htg.service”.
  • Usługa jest aktywna, a czas uruchomienia usługi jest dla nas podany.
  • Jego PID to 7762.
  • Z usługą wiążą się dwa zadania.
  • Usługa wykorzystuje łącznie 928 kibibajtów pamięci.
  • Grupa kontrolna obejmuje skrypt „htg.sh” i polecenie sleep , które zostało uruchomione przez „htg.sh”. Przez większość czasu polecenie sleep będzie wykonywać pracę dla tej usługi.

Pokazano nam również 10 ostatnich wpisów do dziennika stworzonych przez tę usługę. Nic dziwnego, że dzieli je jedna minuta.

Zatrzymywanie i wyłączanie usługi

Jeśli chcesz zatrzymać usługę, możesz to zrobić za pomocą tego polecenia:

 sudo systemctl stop htg.service 

Reklama

Powoduje to zatrzymanie usługi, ale nie uniemożliwia jej ponownego uruchomienia przy następnym uruchomieniu komputera. Aby zatrzymać uruchamianie usługi przy starcie, musisz ją wyłączyć :

 sudo systemctl wyłącz htg.service 

Jeśli usługa jest uruchomiona, to polecenie jej nie zatrzymuje. Po prostu mówi systemd , aby nie uruchamiał usługi przy następnym ponownym uruchomieniu.

Jeśli chcesz zatrzymać usługę i uniemożliwić jej uruchamianie podczas uruchamiania, użyj obu poleceń.

Porada serwisowa

Upewnij się, że program działa zgodnie z oczekiwaniami, zanim spróbujesz go uruchomić jako usługę.

POWIĄZANE: Najlepsze laptopy z systemem Linux dla programistów i entuzjastów