Kör något exekverbart program som en tjänst i Linux
Kör en exekverbar fil som en Linux-tjänst
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.
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