Kör något exekverbart program som en tjänst i Linux

Kör en exekverbar fil som en Linux-tjänst

Sidinnehåll

Här är en uppsättning instruktioner om hur du Konfigurerar för att köra något exekverbart program som en tjänst i Linux med Systemd.

linux cogs Ovan är en AI-genererad bild (av Flux 1 dev-modell) av kugghjulen som representerar Linux DIY-approach.

Systemd

Systemd är ett system- och tjänsthanteringsverktyg och initieringverktyg i vissa Linux-distributioner.

Några av de populära distributionerna med systemd:

  • Ubuntu 16.04 eller nyare
  • Debian Jesse eller nyare
  • Arch Linux
  • CentOS 7 / RHEL 7 eller nyare
  • Fedora 15 eller nyare

systemctl

systemctl är ett kommandoradsverktyg för att kontrollera systemd.

lista alla tjänster

För att lista alla tjänster kör

systemctl list-units --type=service

Skapa en tjänstfil

Navigera till systemd-tjänstkatalogen och skapa en ny fil med en .service-extension:

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

Konfigurera tjänstfilen:

Lägg till följande innehåll i filen, justera värdena efter behov:

[Unit]
Description=Din tjänstbeskrivning
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/path/to/your/executable/directory
ExecStart=/path/to/your/executable
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Spara och stäng filen.

Fördröjd tjänststart

Om du misstänker ett tidsproblem under tjänststarten, överväg att lägga till en fördröjning i din tjänstkonfiguration:

[Service]
ExecStartPre=/bin/sleep 10

Tjänstberoenden

För att konfigurera dina tjänstberoenden: i [Unit]-sektionen i tjänstkonfigurationsfilen,

lägg till följande direktiv:

Använd After= för att ange tjänster som ska startas innan din tjänst:

After=network.target other_service.service

Använd Requires= för att definiera hårda beroenden:

Requires=required_service.service

Använd Wants= för mjuka beroenden:

Wants=optional_service.service

Ladda om systemd för att känna igen den nya tjänsten

sudo systemctl daemon-reload

Kontrollera tjänstberoenden

sudo systemctl list-dependencies your_service_name.service

Aktivera tjänsten för att starta vid uppstart

sudo systemctl enable your_service_name.service

För att verifiera att din tjänst är inställd för att starta vid uppstart:

sudo systemctl is-enabled your_service_name.service

Starta tjänsten

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

Kontrollera tjänstens status

Om något gick fel - kontrollera Linux-tjänstloggar och status:

sudo systemctl status your_service_name.service

eller

sudo journalctl -u your_service_name.service

För Python-skript

ExecStart=/path/to/conda/envs/my_env_name/bin/python /path/to/executable.py

Kommentarer

Du kan nu hantera din tjänst med systemctl-kommandon, såsom start, stop, restart och status.

För exekverbara filer som kräver parametrar, ändra ExecStart-raden i tjänstfilen därefter.

Till exempel, om du behöver köra en Java-applikation, använd det fullständiga Java-kommandot i ExecStart-raden.

Kom ihåg att justera filbehörigheter och ägarskap som nödvändigt, och se till att det exekverbara programmet har rätt exekveringsbehörigheter.

Systemd-tjänsterkontroll med chkservice

Istället för att köra

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

Kan du använda konsol-UI-verktyget. enkelt och lättviktigt

sudo apt-get install chkservice

sudo chkservice

Användbara länkar