Hur man skapar en anpassad systemd-tjänst i Linux

Systemd är ett mångsidigt init-system för Linux som effektivt hanterar program och resurser. Lär dig skapa anpassade tjänster för att optimera din Ubuntu-upplevelse.

Systemd är ett kraftfullt och mycket mångsidigt init-system för Linux-distributioner. Det kan köra program, hantera systemresurser och till och med kontrollera tillståndet på din dator. I den här artikeln kommer jag att visa hur du kan använda Systemd för att kontrollera dina appar genom att skapa en anpassad tjänsteenhet i Ubuntu.

Vad är en Systemd-tjänsteenhet?

En tjänsteenhet är en vanlig fil som innehåller detaljer om hur ett specifikt program ska köras. Den inkluderar generell metadata om programmet, hur det ska köras och huruvida Systemd kan få åtkomst till det under en vanlig session.

I standardutförande har varje daemon på en Systemd-baserad maskin någon form av tjänstefil. OpenSSH, till exempel, använder ssh.service-enheten i “/etc/systemd/system/” för att avgöra hur den ska köras i Debian och Ubuntu.

På en grundläggande nivå består en tjänsteenhetsfil av tre delar: kategorierna Unit, Service och Install. Unit-avsnittet tillhandahåller programmets metadata och beroenden. Service-avsnittet definierar var appen befinner sig och hur Systemd kommer att köra den. Slutligen beskriver Install-avsnittet när Systemd kan starta appen.

Skapa en System-nivå anpassad Systemd-tjänst

En av de vanligaste användningarna för en anpassad tjänst är att automatisera kommandon som kräver root-privilegier eller utnyttja Systemd-timrar. Till exempel hjälper en anpassad tjänst till att säkerställa att en Minecraft-server startar korrekt efter en omstart.

För att skapa en anpassad system-nivå tjänst i Linux, börja med att skapa Systemd-enhetsfilen i din användares hemkatalog:

nano ~/my-system-app.service

Klistra in följande kodblock i din nya enhetsfil. Detta är den enklaste giltiga konfigurationen för en Systemd-tjänst:

[Unit] Description=Min Första Tjänst After=network.target [Service] Type=simple ExecStart=/path/to/bin Restart=always [Install] WantedBy=multi-user.target

Byt ut variabeln “Description” med detaljer om din användarnivå-tjänst.

Byt ut variabeln “ExecStart” med den fullständiga sökvägen till programmet som du vill köra.

Spara din nya fil och kopiera den sedan till din maskins tjänstekatalog:

sudo cp ./my-system-app.service /etc/systemd/system/

Kör följande kommando för att starta om Systemd-daemonen:

sudo systemctl daemon-reload

Testa din nya system-nivå tjänst genom att köra följande kommando:

sudo systemctl start my-system-app.service

Slutligen, bekräfta att din nya tjänst körs korrekt genom att kontrollera dess status i systemctl:

systemctl status my-system-app.service

Skapa en användarnivå anpassad Systemd-tjänst

Tjänsteenheter är inte begränsade till systemnivå-appar eller superanvändare. Med hjälp av Systemd-user är det möjligt att skapa rootfria tjänster. Detta gör det möjligt för icke-root-användare att hantera lokala appar samtidigt som de förbättrar sin PC:s säkerhet genom att begränsa program med root-åtkomst.

För att skapa din användarnivå-anpassade tjänst i Linux, skapa en ny Systemd-enhetsfil i din användares hemkatalog:

nano ~/my-user-app.service

Klistra in följande kodblock i din nya enhetsfil:

[Unit] Description=Min Första Användartjänst After=graphical-session.target [Service] Type=simple ExecStart=/path/to/bin [Install] WantedBy=default.target

Byt ut värdet på variabeln “ExecStart” till sökvägen till programmet som du vill köra. Eftersom detta är en användarnivå-tjänst, se till att ditt användarkonto har rätt åtkomst till programmet.

Spara din nya användarnivå-tjänstfil och skapa sedan den lokala Systemd-katalogen för din användare:

mkdir -p ~/.config/systemd/user/

Kopiera din nya användarnivå-tjänstfil till den lokala Systemd-katalogen för din användare:

cp ./my-user-app.service ~/.config/systemd/user/

Säkerställ att Systemd kontrollerar din användarkatalog för nya tjänsteenhetsfiler:

systemctl daemon-reload --user

Slutligen, bekräfta att din nya tjänst körs korrekt genom att kontrollera dess status i systemctl:

systemctl --user status my-user-app.service

Bra att veta: Systemd är mer än bara ett init-system. Lär dig hur dess systerprogram: Systemd-boot står sig mot den populära GRUB.

Justera din anpassade Systemd-tjänst

En av Systemds kärnstyrkor är att det låter dig helt anpassa hur program körs och hanteras.

Lägga till miljövariabler till en anpassad tjänst

Miljö.

Variabler är en viktig del av varje Linux-system. De ger ytterligare data till ett program utan att behöva peta i konfigurationsfiler. Med Systemd är det möjligt att använda miljövariabler genom att integrera dem i dina service-enheter.

Börja med att inaktivera den tjänst som du vill ändra:

systemctl --user disable --now my-user-app.service

Öppna din anpassade servicefil med din favorittextredigerare:

sudo nano ~/.config/systemd/user/my-user-app.service

Scrolla ner till “[Service]” sektionen och lägg till följande kodrad precis under “Type=” variabeln:

Environment=""

Lägg till den miljövariabel som du vill införa i din anpassade tjänst. I mitt fall vill jag lägga till en EDITOR-variabel för att säkerställa att min tjänst ser min Vim-instans.

Spara din modifierade servicefil och ladda sedan om din Systemd-daemon för att tillämpa dina ändringar.

Starta din nya Systemd-tjänst för att använda din nya miljövariabel:

systemd --user start my-user-app.service

Begränsa anpassad tjänst till en specifik användare

Förutom användarnivå enhetsfiler kan du också justera en systemnivå tjänst att köras under en specifik användare. Detta är användbart om du vill köra en app under ett rootless och shell-löst användarkonto.

För att binda en Systemd-tjänst till en användare, inaktivera först helt din anpassade enhet.

Se till att det målanvändarkontot redan finns på din maskin.

Öppna din systemnivå tjänstfil med din favorittextredigerare:

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

Scrolla ner till “[Service]” sektionen, lägg sedan till “User=” variabeln följt av namnet på ditt användarkonto.

Observera: du kan också specificera gruppen för din tjänst genom att lägga till “Group=” under User variabeln.

Spara ändringarna i din enhetsfil och starta sedan tjänsten:

sudo systemctl start my-system-app.service

Bekräfta att din tjänst nu körs som din användare genom att köra följande kommando:

ps -o user= -p $(systemctl show my-system-app.service -p MainPID | awk -F= '{print $2}')

Begränsa en tjänsteenhets resursförbrukning

Förutom att justera miljövariabler och användare kan Systemd begränsa de resurser en app kan konsumera under sin livstid. Även om det inte görs som standard, är det möjligt att kontrollera centrala delar som CPU-användning och totalt processantal.

Börja med att helt inaktivera den tjänst som du vill justera.

Öppna tjänsteenhetsfilen med din favorittextredigerare:

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

Scrolla ner till “[Service]” sektionen, och lägg till variabelnamnet för den resurs som du vill begränsa. Till exempel, att lägga till “MemoryHigh=” variabeln gör att du kan ställa in en mjuk minnesgräns för den tjänsten.

Tips: Du kan hitta en lista över giltiga variabler genom att köra man systemd.resource-control i en terminalsession.

Spara din enhetsfil och ladda sedan om din Systemd-tjänst:

sudo systemctl enable --now my-system-app.service

Till sist kan du övervaka dina körande tjänster genom att köra systemd-cgtop.

Att lära sig att skapa anpassade Systemd-tjänster och modifiera dem efter dina behov är bara steget mot att förstå detta mycket mångsidiga verktyg. Utforska mer av Systemd och vad dess omfattande ekosystem kan göra genom att kontrollera hur Run0 presterar mot Sudo.

Ratkaisee kysymyksesi

Hur startar man en systemd tjänst?

För att starta en systemd-tjänst, följ dessa steg:

 

  • Öppna terminalen.
  • Använd kommandot: sudo systemctl start application.service Ersätt 'application.service' med den specifika tjänstens namn.
  • Om du inte kör som root-användare, se till att använda sudo för att ha rätt behörigheter. Kontrollera att tjänsten har startat korrekt med: sudo systemctl status application.service

 

Nyt kun olet lukenut Hur man skapar en anpassad systemd-tjänst i Linux loppuun, kutsumme sinut tutustumaan lisää Linux-kategoriaan. Löydät sieltä muita mielenkiintoisia artikkeleita, jotka laajentavat tietojasi ja pitävät sinut ajan tasalla. Älä lopeta lukemista ja löytämistä!

Indeksi
  1. Vad är en Systemd-tjänsteenhet?
  2. Skapa en System-nivå anpassad Systemd-tjänst
  3. Skapa en användarnivå anpassad Systemd-tjänst
  4. Justera din anpassade Systemd-tjänst
    1. Lägga till miljövariabler till en anpassad tjänst
    2. Begränsa anpassad tjänst till en specifik användare
    3. Begränsa en tjänsteenhets resursförbrukning
  5. Ratkaisee kysymyksesi
    1. Hur startar man en systemd tjänst?

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

Go up