Hur du Lägger Till Dina Egna Tjänster till systemd För Enklare Hantering

0
307

Linux-servrar är utformade för att vara vänster kör hela tiden, snarare än att börja viktiga program manuellt och lämnar dem i en tmux sessionen, så bör du lägga till dem till systemd som en tjänst som automatiskt kommer att starta vid uppstart och starta om fel skulle uppstå.

Att Arbeta Med Systemd Och Tjänster

Systemd butiker konfiguration för tjänster på två ställen. Den första är /lib/systemd/system/, där du hittar konfiguration för många tjänster på ditt system. De flesta program installeras installera tjänster här. Den andra är /etc/systemd/system/ som åsidosätter /lib/systemd katalog och är i allmänhet används för att placera användarskapade tjänster. Det finns också en /etc/systemd/användare/, som går tjänster för enskilda inloggade användare, såsom att hämta e-post.

Många av dessa tjänster inte köra hela tiden som nginx eller skulle MySQL. Du kan skriva ut en lista över tjänster som redan finns i använda reglage:

tjänst-status-alla

Tjänster med ett ” + ” – symbolen är igång och tjänster med ett “-” symbolen för närvarande är stoppat. Du kan läsa mer detaljerad information med:

service status nginx

Eftersom tjänster som körs i bakgrunden, de behöver inte logga sin produktion till din konsol i stället att logga utdata till systemd tidning. “Status” på kommando kommer att visa de sista raderna i denna tidning, men du kan läsa den direkt med:

journalctl -fn 50 -u nginx

Detta kommando skriver ut de senaste 50 loggposter (-n) från nginx service (u). Det är konfigurerad för att skriva ut allt och börja på botten, följande nya loggposter som de är skapade (-f).

Naturligtvis, många program kommer fortfarande skriva mest saker till deras tillgång eller fel-loggar, så se till att kolla dem också. Tidskriften håller reda på saker inloggad direkt till konsolen, som kan vara användbar för felsökning av din egna tjänster.

Enkel Service Installation

Systemd används för en massa saker i Linux, och för varje objekt som det förvaltar kallas en Enhet, och har en motsvarande “. – styck File” att definiera vad de är. Dessa kan vara enkla tjänster såsom nginx eller MySQL, men de kan också vara saker som att montera poäng, apparater, uttag, och massor av andra under-the-hood grejer, alla som förvaltas av systemd. Enheter kan också vara mål, som används för att styra andra tjänster kommer att köras (dvs, efter att nätverket har initierats).

För detta gäller även om du förmodligen bara vill konfigurera din ansökan som en grundläggande service. För att göra detta måste du skapa en ny enhet-fil, som du vill placera i /etc/systemd/system/ och namnet med ett .tjänsten extension:

touch /etc/systemd/system/program.service

Enheten filer har några olika avsnitt, men generellt kommer att se något liknande detta:

[Enhet]
Beskrivning=Exempel Service
Efter= – nätverk.målet
StartLimitIntervalSec=0

[Service]
Type=simple
Starta om=alltid
RestartSec=1
User=serviceuser
ExecStartPre=
ExecStart=/sökväg/till/executable [val]
ExecStartPost
ExecStop=
ExecReload=

[Installera]
WantedBy=multi-user.målet

Först upp, [Enhet] avsnitt, som definierar en massa metadata om enheten. Efter= direktivet kan användas för att fördröja enhet aktivering till en annan enhet är igång, såsom nätverk, eller en annan tjänst, till exempel mysql.Detta gör det inte ett svårt beroende av den tjänsten, men du kan göra det med den Förutsätter= eller Vill= direktiven. Detta avsnitt konfigurerar även det maximala antalet gånger maskinen ska försöka att vara igång innan systemd ger upp helt, eftersom du förmodligen vill att det ska fortsätta att försöka, kan du ställa in detta till 0 för att inaktivera detta beteende.

Nästa är [Service] avsnitt som är specifika för service unit-filer. Det är här du kommer att konfigurera de Exec alternativ. Användaren kommer att köra tjänsten som en viss användare. Du kan ställa in detta på ditt personliga användarkonto, rot, eller en skräddarsydd service-konto. Se bara till att användaren har tillräcklig behörighet för att göra sitt jobb.

Det finns ett par olika direktiven här för att ange program att köra. ExecStartPre kommer att köras först, så att du kan göra alla inställningar som behövs innan den verkligen börjar. ExecStart är det huvudsakliga programmet. ExecStartPost går efteråt, och ExecStop körs när tjänsten stänger ner. ExecReload finns ett särskilt direktiv, och används när du kallar “reload” i stället för att starta om. Detta gör att du kan utföra run-time omlastning av konfiguration, under förutsättning att din ansökan har förmågan.

Slutligen, på [Install] avsnitt, som definierar några fler beteenden som är relaterade till hur systemd hanterar enheten. Detta används oftast för att ange WantedBy= direktivet, som används för att tala om systemd när du ska starta din tjänst, och skapar symboliska länkar mellan mål och deras beroende enheter. Om du är osäker på vilket mål att använda flera användare.målet kommer att köra tjänster på start, efter det att det mesta är laddad.

Generellt, konfigurationen är ganska lätt, och allt du egentligen behöver göra är att sätta i din körbara som ett argument i [Service] avsnitt. När din service är skapat, kommer du att behöva uppdatera systemctl daemon uppdateras med dina ändringar:

sudo systemctl daemon-reload

Och att det som kommer att köra det vid uppstart, per enhet config):

sudo systemctl aktivera myapp

Och sedan starta tjänsten:

sudo service myapp start

Tjänsten ska nu köras i bakgrunden, och du kan kontrollera journalctl att titta på sin produktion. Om det matas ut systemd kommer automatiskt att starta den igen, och det ska köras vid uppstart vid sidan av de andra tjänster på ditt system.

Om du behöver starta om din tjänst, du kan använda:

sudo service myapp starta om

Som kommer att utföra ExecStop= direktivet, stänga av enheten, och sedan starta det igen.