Hantera tjänster med systemctl
Systemd har nu ersatt de traditionella uppstarthanterarna i nästan alla Linuxdistributioner. Det finns fortfarande några kvar som ännu inte gett med dig för systemd, men de är få.
Det har ordats mycket om för- och nackdelar med systemd, bland annat mycket om att systemd inte följer UNIX-filosofin “Write programs that do one thing and do it well”. Men oavsett vad så kommer vi inte längre ifrån systemd, och vi måste således lära oss att hantera besten.
Men det finns faktiskt en del fördelar med systemd också - det är nu lättare än någonsin att hoppa mellan olika distributioner eftersom systemd fungerar likadant överallt. Vet du hur du startar och aktiverar en tjänst i CentOS, vet du också hur du startar aktiverar en tjänst i Debian.
Det här är en kort och praktiskt guide till hur du hanterar tjänster i systemd
med hjälp utav verktyget systemctl
. Som exempeltjänst används här
Apache. Under Debian & Ubuntu heter tjänster apache
, och under CentOS, Fedora
och RedHat heter den httpd
.
Aktivera, avaktivera, starta och stoppa tjänster
Att aktivera en tjänst i systemd betyder att den startar automatiskt när
Linux-systemet startas. En tjänst aktiveras med kommandot systemctl
enable
, exempelvis:
[root@centos7 ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
För att faktiskt starta tjänsten direkt, utan att behöva starta om maskinen
används systemctl start
.
[root@centos7 ~]# systemctl start httpd
För att starta om en tjänst, till exempel efter att du ändrat i någon
konfiguration används systemctl restart
.
[root@centos7 ~]# systemctl restart httpd
Det finns dock ett annat kommando också, systemctl reload
, som används för att
läsa in konfigurationsfiler på nytt, utan att behöva starta om en tjänst helt
och hållet. Det är dock inte alla tjänster som stödjer denna funktion.
[root@centos7 ~]# systemctl reload httpd
För att stoppa en tjänst igen används systemctl stop
.
[root@centos7 ~]# systemctl stop httpd
Och till slut, för att avaktivera en tjänst så att den inte startas automatiskt
när maskinen startas används systemctl disable
.
[root@centos7 ~]# systemctl disable httpd
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
Kontrollera status
För att kontrollera om en tjänst är aktiverad (det vill säga startas automatiskt
med systemet) används kommandot systemctl is-enabled
, och för att kontrollera
om en tjänst är igång just nu används systemctl is-active
.
[root@centos7 ~]# systemctl is-enabled httpd
disabled
[root@centos7 ~]# systemctl is-active httpd
active
För att visa alla aktiva tjänster räcker det med att köra systemctl
.
[root@centos7 ~]# systemctl
UNIT LOAD ACTIVE SUB DESCRIPTION
proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executable File Formats File System
sys-devices-pci0000:00-0000:00:01.1-ata1-host0-target0:0:0-0:0:0:0-block-sr0.device loaded active plugged QEMU_DVD-
sys-devices-pci0000:00-0000:00:03.0-virtio0-net-eth0.device loaded active plugged Virtio network device
sys-devices-pci0000:00-0000:00:04.0-sound-card0.device loaded active plugged 82801FB/FBM/FR/FW/FRW (ICH6 Family) Hi
sys-devices-pci0000:00-0000:00:06.0-virtio1-virtio\x2dports-vport1p1.device loaded active plugged /sys/devices/pci0
sys-devices-pci0000:00-0000:00:06.0-virtio1-virtio\x2dports-vport1p2.device loaded active plugged /sys/devices/pci0
sys-devices-pci0000:00-0000:00:07.0-virtio2-block-vda-vda1.device loaded active plugged /sys/devices/pci0000:00/000
sys-devices-pci0000:00-0000:00:07.0-virtio2-block-vda-vda2.device loaded active plugged LVM PV ZHwHEI-87YM-QIlq-RWa
sys-devices-pci0000:00-0000:00:07.0-virtio2-block-vda.device loaded active plugged /sys/devices/pci0000:00/0000:00:
sys-devices-pnp0-00:04-tty-ttyS0.device loaded active plugged /sys/devices/pnp0/00:04/tty/ttyS0
sys-devices-virtual-block-dm\x2d0.device loaded active plugged /sys/devices/virtual/block/dm-0
sys-devices-virtual-block-dm\x2d1.device loaded active plugged /sys/devices/virtual/block/dm-1
sys-module-configfs.device loaded active plugged /sys/module/configfs
sys-subsystem-net-devices-eth0.device loaded active plugged Virtio network device
-.mount loaded active mounted /
boot.mount loaded active mounted /boot
dev-hugepages.mount loaded active mounted Huge Pages File System
dev-mqueue.mount loaded active mounted POSIX Message Queue File System
run-user-1000.mount loaded active mounted /run/user/1000
sys-kernel-config.mount loaded active mounted Configuration File System
....
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
101 loaded units listed. Pass --all to see loaded but inactive units, too.
Vill vi bara se tjänster som är i ett running state, kan vi istället använda
följande kommando systemctl --all --state=running
.
[root@centos7 ~]# systemctl --all --state=running
UNIT LOAD ACTIVE SUB DESCRIPTION
session-1.scope loaded active running Session 1 of user jake
session-2.scope loaded active running Session 2 of user jake
auditd.service loaded active running Security Auditing Service
chronyd.service loaded active running NTP client/server
crond.service loaded active running Command Scheduler
dbus.service loaded active running D-Bus System Message Bus
firewalld.service loaded active running firewalld - dynamic firewall daemon
getty@tty1.service loaded active running Getty on tty1
httpd.service loaded active running The Apache HTTP Server
irqbalance.service loaded active running irqbalance daemon
lvm2-lvmetad.service loaded active running LVM2 metadata daemon
NetworkManager.service loaded active running Network Manager
polkit.service loaded active running Authorization Manager
postfix.service loaded active running Postfix Mail Transport Agent
rsyslog.service loaded active running System Logging Service
sshd.service loaded active running OpenSSH server daemon
systemd-journald.service loaded active running Journal Service
systemd-logind.service loaded active running Login Service
systemd-udevd.service loaded active running udev Kernel Device Manager
tuned.service loaded active running Dynamic System Tuning Daemon
dbus.socket loaded active running D-Bus System Message Bus Socket
lvm2-lvmetad.socket loaded active running LVM2 metadata daemon socket
systemd-journald.socket loaded active running Journal Socket
systemd-udevd-control.socket loaded active running udev Control Socket
systemd-udevd-kernel.socket loaded active running udev Kernel Socket
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
25 loaded units listed.
Vill vi istället se status för hela systemet kan vi använda systemctl
status
. Detta ger oss en trädliknande vy över processerna som körs via systemd
och deras barnprocesser osv.
[root@centos7 ~]# systemctl status
● centos7.nixnet.jke
State: running
Jobs: 0 queued
Failed: 0 units
Since: sön 2018-06-17 21:46:53 CEST; 19min ago
CGroup: /
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
├─user.slice
│ └─user-1000.slice
│ ├─session-2.scope
│ │ ├─1458 sshd: jake [priv]
│ │ ├─1462 sshd: jake@pts/0
│ │ ├─1463 -bash
│ │ ├─1480 su
│ │ ├─1484 bash
│ │ ├─1665 systemctl status
│ │ └─1666 less
│ └─session-1.scope
│ ├─ 658 login -- jake
│ └─1437 -bash
└─system.slice
├─httpd.service
│ ├─1627 /usr/sbin/httpd -DFOREGROUND
│ ├─1628 /usr/sbin/httpd -DFOREGROUND
│ ├─1629 /usr/sbin/httpd -DFOREGROUND
│ ├─1630 /usr/sbin/httpd -DFOREGROUND
│ ├─1631 /usr/sbin/httpd -DFOREGROUND
│ └─1632 /usr/sbin/httpd -DFOREGROUND
├─rsyslog.service
│ └─1000 /usr/sbin/rsyslogd -n
├─tuned.service
│ └─997 /usr/bin/python -Es /usr/sbin/tuned -l -P
├─sshd.service
│ └─996 /usr/sbin/sshd -D
├─postfix.service
│ ├─1340 /usr/libexec/postfix/master -w
│ ├─1345 pickup -l -t unix -u
│ └─1346 qmgr -l -t unix -u
├─NetworkManager.service
│ ├─660 /usr/sbin/NetworkManager --no-daemon
│ └─799 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-eth0.pid -lf /var/lib
├─firewalld.service
│ └─656 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
├─crond.service
│ └─652 /usr/sbin/crond -n
├─systemd-logind.service
│ └─645 /usr/lib/systemd/systemd-logind
├─dbus.service
│ └─631 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
├─chronyd.service
│ └─635 /usr/sbin/chronyd
├─irqbalance.service
│ └─629 /usr/sbin/irqbalance --foreground
├─polkit.service
│ └─628 /usr/lib/polkit-1/polkitd --no-debug
├─auditd.service
│ └─604 /sbin/auditd
├─systemd-udevd.service
│ └─490 /usr/lib/systemd/systemd-udevd
├─lvm2-lvmetad.service
│ └─482 /usr/sbin/lvmetad -f
└─systemd-journald.service
└─462 /usr/lib/systemd/systemd-journald
Unit-filer
Systemd är uppbyggt kring något som kallas för units. Detta är filer som konfigurerar varje tjänst som systemd startar och stoppar. En unit-fil innehåller till exempel information om vilken binärfil som ska köras för att starta tjänsten, vilka argument som skall startas med tjänsten, hur tjänsten startas om, stoppas osv. Här finns också information om exempelvis eventuella temporära kataloger, PID-filer osv.
För att visa en unit-fil används kommandot systemctl cat
. Exempelvis:
[root@centos7 ~]# systemctl cat httpd
# /usr/lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
För att lista alla unit-filer på systemet används kommandot systemctl
list-units --all
.
Redigera en unit
För att redigera en unit används kommandot systemctl edit
. Om vi exempelvis
vill redigera Apaches unit och kör systemctl edit httpd
kommer vi få en tom
fil. Detta eftersom edit
som standard bara lägger till värden som ska ändras
till en så kallad override-fil. Vill vi ändra den faktiska unit-filen måste
vi istället använda systemctl edit httpd --full
. Då startas editorn med hela
unit-filen. När vi sparar unit-filen skapas en kopia i
/etc/systemd/system/. För vår Apache-fil blir detta alltså
/etc/systemd/system/httpd.service. Denna fil kommer då att användas som
standard istället för originalfilen som fortfarande finns kvar i sin
originalform i /lib/systemd/system/. Detta är praktiskt, för om vi skulle
vilja återgå till standardkonfigurationen kan vi helt enkelt bara radera
httpd.service från /etc/systemd/system/ och då kommer istället
unit-filen från /lib/systemd/system att användas.
Avslutning
Vi har än så länge bara skrapat på ytan av systemd. Det är ett gigantiskt system som täcker allt från runlevels, tjänster, loggfiler, omstart av systemet med mera. Men detta är det viktigaste för att kunna hantera tjänster på ett effektivt sätt under systemd. Och som jag nämnde i början så fungerar det på samma sätt under både Debian & Ubuntu och RedHat-baserade system som CentOS och Fedora.
Nyhetsbrev
Nyhetsuppdateringar från tidningen direkt till din inkorg, helt kostnadsfritt. Avsluta när du vill.
Relaterade artiklar
-
Avlyssna trafik på servern med Wireshark och TShark
Wireshark är ett ovärderligt verktyg för att felsöka nätverkskonfigurationer, applikationer, API:er, demoner och mycket annat. I kombination med
tshark
kan vi dessutom avlyssna trafiken på en server i realtid. -
Var försiktig med att curl:a skript som root
Att installera program i Linux genom att omdirigera utdata från Curl till skalet är snabbt och smidigt. Men det är ack så farligt om du inte känner till programmet eller dess ursprung.
-
Vidarebefordran av SSH-agenten
SSH agent forwarding, eller vidarebefordran av SSH-agenten, innebär att man kan vidarebefordra SSH-agenten till ett fjärrsystem. På så sätt behöver man inte kopiera sin privata SSH-nyckel till fjärrsystemet, eller skapa flera nycklar för olika system. Men det finns risker med det.
-
Jenkins som ett alternativ till Ansible Tower
Ansible Tower kommer med en stor prislapp, speciellt för ett mindre företag eller en privatperson. AWX å andra sidan är helt fritt, men kräver numera Kubernetes. För den som vill automatisera sina Ansible Playbooks går det dock bra att använda Jenkins som en ersättning för Tower och AWX.
-
Hämta data från API:er med cURL och jq
Med cURL och jq går det att extrahera data från API:er direkt från kommandoraden. Jq är en JSON-tolkare och beskrivs av utvecklarna som sed och awk för JSON.
Senaste nyheterna och inläggen
-
Avlyssna trafik på servern med Wireshark och TShark
Wireshark är ett ovärderligt verktyg för att felsöka nätverkskonfigurationer, applikationer, API:er, demoner och mycket annat. I kombination med
tshark
kan vi dessutom avlyssna trafiken på en server i realtid. -
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Sommarens skånska demopartyn
Årets sommar bjuder på två skånska demopartyn. Först ut är Reunion i Kvidinge den 28–30 juni. Därefter är det Pågadata i Örtofta den 9–11 augusti.
-
Riskerna med BankID som ingen pratar om
BankID är ett säkert och smidigt sätt att identifiera sig online. Men i takt med dess ökade popularitet och användning har det blivit en svag länk – en single point of failure – på mer än ett sätt.
-
Polisernas fängelsedomar står fast
Efter tre år är målet mot de två poliser som olovligen tog sig in i en berusad mans bostad i Landskrona och misshandlade honom klart. Högsta domstolen beslutade den sjätte mars att avvisa överklagan. Fängelsedomarna för poliserna står därmed fast.
Utvalda artiklar
-
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Datorparty i Landskrona
I helgen höll Syntax Society sitt årliga sommarparty. Platsen var en källarlokal i Landskrona där ett femtontal personer medverkade.
-
Det första Pågadata har ägt rum
I helgen ägde det första Pågadata rum – uppföljaren till Gubbdata. Platsen var Folkets Hus i Kvidinge. Organisatör av partyt var Johan “z-nexx” Osvaldsson med hjälp från Jesper “Skuggan” Klingvall. Partyt hade över 100 anmälda deltagare.
-
Även hovrätten fäller poliserna för att ha satt dit oskyldig
Hovrätten fastställer straffet för de två poliser som förra året dömdes till vardera ett års fängelse av Lunds tingsrätt för att ha misshandlat och satt dit en oskyldig man. De båda poliserna ska även betala skadestånd till mannen.
-
Retroloppis i Påarp
Idag var det retroloppis hos Andreas Nilsson i Påarp. På baksidan av huset fanns hundratals spel uppradade på långa bord. Trots friska vindar och sval temperatur var loppisen välbesökt.
CyberInfo Sverige är ett it- och medieföretag i nordvästra Skåne som tillhandahåller böcker, utbildningar, nyheter och konsulttjänster inom Linux, säkerhet och programmering.
CyberInfo Sverige är godkänd för F-skatt, är momsregistrerat och innehar
utgivningsbevis för webbplatsen www.cyberinfo.se.