Uruchamianie dowolnego pliku wykonywalnego jako usługi w systemie Linux

Uruchamianie dowolnego pliku wykonywalnego jako usługi w systemie Linux

Page content

Oto zestaw instrukcji dotyczących Jak skonfigurować uruchamianie dowolnego wykonywalnego pliku jako usługi w systemie Linux przy użyciu Systemd.

linux cogs Powyżej znajduje się obraz wygenerowany przez AI (model Flux 1 dev) przedstawiający zębatki, które symbolizują DIY podejście do systemu Linux.

Systemd

Systemd to menedżer systemu i usług oraz narzędzie inicjalizacyjne w niektórych dystrybucjach Linux.

Niektóre popularne dystrybucje z systemd:

  • Ubuntu 16.04 lub nowsze
  • Debian Jessie lub nowsze
  • Arch Linux
  • CentOS 7 / RHEL 7 lub nowsze
  • Fedora 15 lub nowsze

systemctl

systemctl to narzędzie wiersza poleceń do kontroli systemd.

Lista wszystkich usług

Aby wyświetlić listę wszystkich usług, uruchom polecenie:

systemctl list-units --type=service

Utwórz plik usługi

Przejdź do katalogu usług systemd i utwórz nowy plik z rozszerzeniem .service:

sudo nano /etc/systemd/system/your_service_name.service

Skonfiguruj plik usługi:

Dodaj poniższy zawartość do pliku, dostosowując wartości w razie potrzeby:

[Unit]
Description=Opis Twojej Usługi
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/ścieżka/do/Twojego/katalogu/z/wykonywalnym
ExecStart=/ścieżka/do/Twojego/wykonywalnego
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Zapisz i zamknij plik.

Opóźnione uruchamianie usługi

Jeśli podejrzewasz, że występuje problem z czasem podczas uruchamiania usługi, rozważ dodanie opóźnienia w konfiguracji usługi:

[Service]
ExecStartPre=/bin/sleep 10

Zależności usługi

Aby skonfigurować zależności usługi: w sekcji [Unit] pliku konfiguracji usługi,

dodaj poniższe dyrektywy:

Użyj After=, aby określić usługi, które powinny zostać uruchomione przed Twoją usługą:

After=network.target inna_usługa.service

Użyj Requires=, aby zdefiniować twarde zależności:

Requires=konieczna_usługa.service

Użyj Wants= dla miękkich zależności:

Wants=opcjonalna_usługa.service

Przeładuj systemd, aby rozpoznać nową usługę

sudo systemctl daemon-reload

Sprawdź zależności usługi

sudo systemctl list-dependencies your_service_name.service

Włącz usługę, aby uruchamiała się przy starcie systemu

sudo systemctl enable your_service_name.service

Aby sprawdzić, czy usługa jest włączona do uruchamiania przy starcie systemu:

sudo systemctl is-enabled your_service_name.service

Uruchom usługę

sudo systemctl start your_service_name.service
# lub
sudo systemctl restart your_service_name.service

Sprawdź status usługi

Jeśli coś poszło nie tak – sprawdź logi i status usługi systemu Linux:

sudo systemctl status your_service_name.service

lub

sudo journalctl -u your_service_name.service

Dla skryptów Pythona

ExecStart=/ścieżka/do/conda/envs/nazwa_srodowiska/bin/python /ścieżka/do/wykonywalnego.py

Uwagi

Teraz możesz zarządzać swoją usługą za pomocą poleceń systemctl, takich jak start, stop, restart i status.

Dla wykonywalnych plików wymagających parametrów, dostosuj linię ExecStart w pliku usługi odpowiednio.

Na przykład, jeśli chcesz uruchomić aplikację Java, użyj pełnego polecenia Java w linii ExecStart.

Pamiętaj, aby dostosować uprawnienia i właściciela plików w razie potrzeby, oraz upewnij się, że wykonywalny plik ma odpowiednie uprawnienia do uruchamiania.

Kontrola usług systemd za pomocą chkservice

Zamiast wykonywać

sudo systemctl start some-serviceservice
# lub
sudo systemctl restart some-serviceservice

Możesz użyć narzędzia interfejsu konsoli. Proste i lekkie:

sudo apt-get install chkservice

sudo chkservice

Przydatne linki