Uruchamianie dowolnego pliku wykonywalnego jako usługi w systemie Linux
Uruchamianie dowolnego pliku wykonywalnego jako usługi w systemie Linux
Oto zestaw instrukcji dotyczących Jak skonfigurować uruchamianie dowolnego wykonywalnego pliku jako usługi w systemie Linux przy użyciu Systemd.
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