Autostart – Uruchamianie własnej usługi podczas startu systemu Linux przy użyciu systemd

Autostart – Uruchamianie własnej usługi podczas startu systemu Linux przy użyciu systemd

Miałem ostatnio potrzebę, aby jeden z kontenerów Docker wystartował wraz ze startem systemu operacyjnego. Postanowiłem, ze podzielę się z Wami najszybszym, a jednocześnie najprostszym sposobem jaki do tej pory znalazłem na startowanie dowolnej usługi w Linuksie, a mianowicie używając narzędzia systemd.

Agenda
  1. Przygotowanie pliku konfiguracyjnego definiującego usługę
  2. Aktywowanie oraz zarządzanie nowo-powstałą usługą
  3. Przykład: autostart dowolnego kontenera Docker podczas startu systemu

1. Przygotowanie pliku konfiguracyjnego definiującego usługę

Definiowanie nowej usługi rozpoczynamy od utworzenia pliku my-service.service  w katalogu /etc/systemd/system:

sudo nano /etc/systemd/system/my-service.service

Poniższy listing zawiera najprostszą wymaganą konfigurację, którą należy wprowadzić aby usługa w ogóle wystartowała. Jak widać jest to bajecznie proste. Podajemy jedynie nazwę, oraz komendy do starowania i zatrzymywania naszej usługi.

[Unit]
Description=My Service

[Service]
ExecStart=/path/to/my/service start
ExecStop=/path/to/my/service stop

[Install]
WantedBy=default.target

Jeśli przedstawiona powyżej konfiguracja nie spełnia Twoich oczekiwań zapraszam do zapoznania się z oficjalną dokumentacją narzędzia systemd. Odnajdziesz tam bardziej zaawansowanie opcje, które być może rozwiążą twój problem. Jeśli będziecie zainteresowani tym tematem – mogę omówić go szerzej w osobnym wpisie.

2. Aktywowanie oraz zarządzanie nowo-powstałą usługą

Samo umieszczenie konfiguracji usługi w folderze /etc/systemd/system nie spowoduje jeszcze, że zostanie ona uruchomiona podczas startu systemu. Aby osiągnąć wspomniany  efekt, należy aktywować daną usługę. Na poniższych listingach zaprezentowane są wybrane komendy, które odpowiedzialne są odpowiednio za aktywację, dezaktywację, manualne uruchamianie i zatrzymywanie oraz sprawdzanie aktualnego stanu usługi.

Aktywacja oraz dezaktywacja uruchamiania usługi podczas startu systemu:

sudo systemctl enable my-service.service
sudo systemctl disable my-service.service

Manualny start oraz zatrzymanie usługi:

sudo systemctl start my-service.service
sudo systemctl stop my-service.service

Sprawdzanie stanu usługi

systemctl status my-service.service

3. Przykład: autostart dowolnego kontenera Docker podczas startu systemu

Nadszedł czas na omówienie przedstawionej wcześniej teorii na jakimś konkretnym przykładzie. Niech to będzie uruchomienie kontenera Docker o nazwie my-container-name. Przyjmiemy, że nasza usługa nazywa się  my-docker-service.  Bazując na przedstawionym wcześniej sposobie należy utworzyć plik my-docker-service.service:

sudo nano /etc/systemd/system/my-docker-service.service

zawierający poniższą konfigurację usługi:

[Unit]
Description=My Docker container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a my-container-name
ExecStop=/usr/bin/docker stop -t 10 my-container-name

[Install]
WantedBy=default.target

Ostatnim krokiem jest aktywacja uruchamiania usługi podczas startu systemu. Dla sprawdzenia poprawności konfiguracji możemy ręcznie uruchomić naszą usługę oraz sprawdzić jej status. Całość przedstawia poniższy listing:

sudo systemctl enable my-docker-service.service
sudo systemctl start my-docker-service.service
sudo systemctl status my-docker-service.service
To byłoby na tyle jeśli chodzi o ten wpis. Jeśli podoba Ci się konwencja i chciałbyś więcej takich wpisów, zostaw mi komentarz z tematem, który Cię interesuje a ja postaram się go przygotować. Tymczasem możesz mi pomóc dotrzeć do większej liczby odbiorców udostępniając ten wpis – Dziękuję.

1
Leave a Reply

avatar
1 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
Tomasz Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
Tomasz
Guest
Tomasz

Wartoby dodać jeszcze przykład jak czytać z takiego serwisu to co jest drukowane na standardowe wyjście, np. journalctl -u nazwa.service.
Ps Nie testowałem z dockerem.
Pps. W wielu komendach sufix ‘.service’ można pominąć.

Close Menu