9.10. Systemd bruk og konfigurasjon

9.10.1. Grunnleggende konfigurasjon

/etc/systemd/system.conf filen inneholder et sett av alternativer for å kontrollere grunnleggende systemoperasjoner. Standardfilen har alle oppføringer kommentert med standardinnstillingene angitt. Denne filen er hvor loggnivået kan endres, samt noen grunnleggende logginnstillinger. Se systemd-system.conf(5) manualside for detaljer om hvert konfigurasjonsalternativ.

9.10.2. Deaktiverer skjermtømming ved oppstart

Normal oppførsel for systemd er å tømme skjermen på slutten av oppstartssekvensen. Hvis ønskelig, kan denne oppførselen endres ved å kjøre følgende kommando:

mkdir -pv /etc/systemd/system/getty@tty1.service.d

cat > /etc/systemd/system/getty@tty1.service.d/noclear.conf << EOF
[Service]
TTYVTDisallocate=no
EOF

Oppstartsmeldingene kan alltid gjennomgås ved å bruke journalctl -b kommandoen som root bruker.

9.10.3. Deaktivere tmpfs for /tmp

Som standard, /tmp blir opprettet som en tmpfs. Hvis dette ikke er ønsket, kan det overstyres ved å utføre følgende kommando:

ln -sfv /dev/null /etc/systemd/system/tmp.mount

Alternativt, hvis en egen partisjon for /tmp er ønsket, spesifiser partisjonen i en /etc/fstab oppføring.

[Warning]

Warning

Ikke lag den symbolske lenken ovenfor hvis en separat partisjon brukes til /tmp. Dette vil forhindre rotfilsystemet (/) fra å bli remontert r/w og gjør systemet ubrukelig ved oppstart.

9.10.4. Konfigurere automatisk filoppretting og sletting

Det er flere tjenester som oppretter eller sletter filer eller mapper:

  • systemd-tmpfiles-clean.service

  • systemd-tmpfiles-setup-dev.service

  • systemd-tmpfiles-setup.service

Systemplasseringen for konfigurasjonsfilene er /usr/lib/tmpfiles.d/*.conf. Den lokale konfigurasjonsfilene er i /etc/tmpfiles.d. Filer i /etc/tmpfiles.d overstyrer filer med samme navn i /usr/lib/tmpfiles.d. Se tmpfiles.d(5) manualside for filformat detaljer.

Merk at syntaksen for /usr/lib/tmpfiles.d/*.conf filer kan være forvirrende. For eksempel standard sletting av filer i /tmp mappen ligger i /usr/lib/tmpfiles.d/tmp.conf med linjen:

q /tmp 1777 root root 10d

Typefeltet, q, diskuterer å lage et undervolum med kvoter som egentlig bare er aktuelt for btrfs filsystemer. Den refererer til type v som igjen refererer til type d (mappe). Dette skaper deretter den spesifiserte mappen hvis den ikke er til stede og justerer tillatelsene og eierskap som spesifisert. Innholdet i mappen vil være underlagt tidsbasert opprydding hvis aldersargumentet er spesifisert.

Hvis standardparametrene ikke er ønsket, bør filen bli kopiert til /etc/tmpfiles.d og redigert etter ønske. For eksempel:

mkdir -p /etc/tmpfiles.d
cp /usr/lib/tmpfiles.d/tmp.conf /etc/tmpfiles.d

9.10.5. Overstyre standard tjenesteatferd

Parametrene til en enhet kan overstyres ved å opprette en mappe og en konfigurasjonsfil i /etc/systemd/system. For eksempel:

mkdir -pv /etc/systemd/system/foobar.service.d

cat > /etc/systemd/system/foobar.service.d/foobar.conf << EOF
[Service]
Restart=always
RestartSec=30
EOF

Se systemd.unit(5) manualside for mer informasjon. Etter å ha opprettet konfigurasjonsfilen, kjør systemctl daemon-reload og systemctl restart foobar for å aktivere endringene i en tjeneste.

9.10.6. Feilsøking av oppstartssekvensen

I stedet for vanlige skallskript som brukes i SysVinit eller BSD stil init systemer, bruker systemd et enhetlig format for ulike typer oppstarts filer (eller enheter). Kommandoen systemctl brukes for å aktivere, deaktivere, kontrollere tilstand og få status for enhetsfiler. Her er noen eksempler på ofte brukte kommandoer:

  • systemctl list-units -t <service> [--all]: viser innlastede enhetsfiler av typen service.

  • systemctl list-units -t <target> [--all]: viser innlastede enhetsfiler av typen target.

  • systemctl show -p Wants <multi-user.target>: viser alle enheter som er avhengige av flerbrukermålet. Targets er spesielle enhetsfiler som er analoge med kjørenivåer under SysVinit.

  • systemctl status <servicename.service>: viser statusen til servicename service. .service utvidelsen kan utelates hvis det ikke finnes andre enhetsfiler med samme navn, for eksempel .socket-filer (som lager en lyttekontakt som gir lignende funksjonalitet som inetd/xinetd).

9.10.7. Arbeide med Systemd Journal

Logging på et system oppstartet med systemd håndteres med systemd-journald (som standard), i stedet for en typisk unix syslog nisse (daemon). Du kan også legge til en normal syslog nisse og la begge operere side ved siden av hverandre om ønskelig. Systemd-journald programmet lagrer journaloppføringer i et binært format i stedet for en ren tekstloggfil. Å bistå med å analysere filen, kommandoen journalctl er gitt. Her er noen eksempler på ofte brukte kommandoer:

  • journalctl -r: viser alt innholdet i journal i omvendt kronologisk rekkefølge.

  • journalctl -u UNIT: viser journalpostene knyttet til den angitte UNIT filen.

  • journalctl -b[=ID] -r: viser journal oppføringer siden sist vellykkede oppstart (eller for oppstarts-ID) i omvendt kronologisk rekkefølge.

  • journalctl -f: gir lignende funksjonalitet som tail -f (follow).

9.10.8. Arbeide med kjernedumper

Kjernedumper er nyttige for å feilsøke programmer som krasjet, spesielt når en nisseprosess krasjer. På systemd oppstartede systemer kjernedumping håndteres av systemd-coredump. Det vil logge kjernedumpen i journalen og oppbevare selve kjernedumpen i /var/lib/systemd/coredump. For å hente og behandle kjernedumper, coredumpctl verktøy er gitt. Her er noen eksempler på ofte brukte kommandoer:

  • coredumpctl -r: viser alle kjernedumper i omvendt kronologisk rekkefølge.

  • coredumpctl -1 info: viser informasjonen fra siste kjernedump.

  • coredumpctl -1 debug: laster den siste kjernedumpen inn i GDB.

Kjernedumper kan bruke mye diskplass. Maksimal diskplass brukt av kjernedumper kan begrenses ved å lage en konfigurasjonsfil i /etc/systemd/coredump.conf.d. For eksempel:

mkdir -pv /etc/systemd/coredump.conf.d

cat > /etc/systemd/coredump.conf.d/maxuse.conf << EOF
[Coredump]
MaxUse=5G
EOF

Se systemd-coredump(8), coredumpctl(1), og coredump.conf.d(5) manualsidene for mer informasjon.

9.10.9. Langvarige prosesser

Fra og med systemd-230 blir alle brukerprosesser drept når en brukerøkt er avsluttet, selv om nohup brukes, eller prosessen bruker daemon() eller setsid() funksjoner. Dette er en bevisst endring fra et historisk tillatt miljø til et mer restriktiv. Den nye atferden kan forårsake problemer hvis du er avhengig av at langvarige programmer (f.eks., screen eller tmux) forblir aktive etter avsluttet brukerøkt. Det er tre måter å aktivere langvarige prosesser til å være aktiv etter at en brukerøkt er avsluttet.

  • Aktiver langvarig prosess for kun utvalgte brukere: Vanlige brukere har tillatelse til å aktivere prosessforlenging med kommandoen loginctl enable-linger for deres egen bruker. Systemadministratorer kan bruke den samme kommandoen med et user argument for å aktivere for en bruker. Denne brukeren kan da bruke systemd-run kommandoen for å starte langvarige prosesser. For eksempel: systemd-run --scope --user /usr/bin/screen. Hvis du aktiverer forlenging for din bruker, vil user@.service forbli selv etter at alle påloggingsøktene er lukket, og vil automatisk starte ved systemoppstart. Dette har fordelen av å eksplisitt tillate og ikke tillate prosesser å kjøre etter at brukerøkten er avsluttet, men bryter bakoverkompatibiliteten med verktøy som nohup og verktøy som bruker daemon().

  • Aktiver systemomfattende langvarig prosess: Du kan angi KillUserProcesses=no i /etc/systemd/logind.conf for å muliggjøre prosessforlenging globalt for alle brukere. Dette har fordelen av å gjøre det gamle metoden tilgjengelig for alle brukere på bekostning av eksplisitt kontroll.

  • Deaktiver ved byggetid: Du kan deaktivere systemforlenging som standard mens du bygger systemd ved å legge til bryteren -Ddefault-kill-user-processes=false til meson kommandoen for systemd. Dette deaktiverer helt systemds evne til å drepe brukerprosesser under øktslutt.