Hur hittar jag anledningen till omstart av Linux?

Det händer ofta att vi upptäcker att ett Linux-system har startat om på ett oplanerat sätt eller på grund av okända uppenbara orsaker. Att hitta och lösa grundorsaken kan hjälpa till att förhindra att sådana problem upprepas och undvika oplanerade driftstopp.

Det finns flera sätt vi kan ta reda på vad som utlöste en omstart. I den här artikeln kommer vi att diskutera dessa sätt och hur du kan använda tillgängliga verktyg och loggar i ett Linux-system för att felsöka sådana scenarier.

Inspektera omstartstid

Du kan kontrollera när systemet startade om med vem och senaste kommandon

$ who -b
system boot 2021-02-13 20:51

$ last -x | head | tac
abhishek pts/0 192.168.1.16 Sat Feb 13 19:53 - 19:55 (00:02)
reboot system boot 3.10.0-1160.11.1 Sat Feb 13 19:55 - 20:54 (00:58)
runlevel (to lvl 3) 3.10.0-1160.11.1 Sat Feb 13 19:55 - 20:04 (00:08)
abhishek pts/0 192.168.1.16 Sat Feb 13 19:56 - 20:04 (00:07)
reboot system boot 3.10.0-1160.11.1 Sat Feb 13 20:04 - 20:54 (00:49)
runlevel (to lvl 3) 3.10.0-1160.11.1 Sat Feb 13 20:04 - 20:51 (00:46)
abhishek pts/0 192.168.1.16 Sat Feb 13 20:04 - 20:50 (00:46)
reboot system boot 3.10.0-1160.11.1 Sat Feb 13 20:51 - 20:54 (00:03)
runlevel (to lvl 3) 3.10.0-1160.11.1 Sat Feb 13 20:51 - 20:54 (00:02)
abhishek pts/0 192.168.1.16 Sat Feb 13 20:51 still logged in
$

Kontrollera systemmeddelanden

Du kan ytterligare korrelera den omstart du vill diagnostisera med systemmeddelanden.

För CentOS/RHEL-system hittar du loggarna på /var/log/messages medan för Ubuntu/Debian-system loggas det på /var/log/syslog. Du kan helt enkelt använda svanskommandot eller din favorittextredigerare för att filtrera bort eller hitta specifik data.

Som kan utläsas av loggarna nedan föreslår sådana poster en avstängning/omstart initierad av en administratör eller rotanvändare. Dessa meddelanden kan variera beroende på OS-typ och hur omstart/avstängning utlöses, men du kommer alltid att hitta användbar information genom att titta på systemloggar även om den kanske inte är tillräckligt tydlig för att peka ut orsaken varje gång.

Feb 13 19:56:20 centos7vm chronyd[637]: Source 72.30.35.89 replaced with 142.147.92.5
Feb 13 20:00:40 centos7vm chronyd[637]: Selected source 162.159.200.123
Feb 13 20:01:01 centos7vm systemd: Created slice User Slice of root.
Feb 13 20:01:01 centos7vm systemd: Started Session 2 of user root.
Feb 13 20:04:09 centos7vm systemd-logind: System is powering down.
Feb 13 20:04:09 centos7vm systemd: Closed LVM2 poll daemon socket.
Feb 13 20:04:09 centos7vm systemd: Stopped target Multi-User System.

Ett sådant kommando som du kan använda för att filtrera bort systemloggar ges nedan:

sudo grep -iv ': starting|kernel: .*: Power Button|watching system buttons|Stopped Cleaning Up|Started Crash recovery kernel' 
  /var/log/messages /var/log/syslog /var/log/apcupsd* 
  | grep -iw 'recover[a-z]*|power[a-z]*|shut[a-z ]*down|rsyslogd|ups'

Fångade händelser kanske inte alltid är specifika. Spåra alltid upp händelser som ger tecken på varningar eller fel som kan leda till att systemet stängs av/kraschar.

Verifiera revisionsloggar

För system med auditd är det ett bra ställe att kontrollera olika händelser med hjälp av ausearch-verktyget. Använd kommandot nedan för att kontrollera de två sista posterna från granskningsloggarna.

$ sudo ausearch -i -m system_boot,system_shutdown | tail -4

Detta kommer att rapportera de två senaste avstängningarna eller omstarterna. Om detta rapporterar en SYSTEM_SHUTDOWN följt av en SYSTEM_BOOT, borde allt vara bra. Men om det rapporterar två SYSTEM_BOOT-rader i rad eller bara en enda SYSTEM_BOOT-rad, så stängde systemet troligen inte ner på ett elegant sätt. En normal utdata bör vara något som nedan:

$ sudo ausearch -i -m system_boot,system_shutdown | tail -4
----
type=SYSTEM_SHUTDOWN msg=audit(Saturday 13 February 2021 A.852:8) : pid=621 uid=root auid=unset ses=unset subj=system_u:system_r:init_t:s0 msg=' comm=systemd-update-utmp exe=/usr/lib/systemd/systemd-update-utmp hostname=? addr=? terminal=? res=success'
----
type=SYSTEM_BOOT msg=audit(Saturday 13 February 2021 A.368:8) : pid=622 uid=root auid=unset ses=unset subj=system_u:system_r:init_t:s0 msg=' comm=systemd-update-utmp exe=/usr/lib/systemd/systemd-update-utmp hostname=? addr=? terminal=? res=success'
$

Nedanstående utdata listar två på varandra följande SYSTEM_BOOT-meddelanden, vilket kan indikera en ful avstängning även om den måste korreleras med systemloggar.

$ sudo ausearch -i -m system_boot,system_shutdown | tail -4
----
type=SYSTEM_BOOT msg=audit(Saturday 13 February 2021 A.852:8) : pid=621 uid=root auid=unset ses=unset subj=system_u:system_r:init_t:s0 msg=' comm=systemd-update-utmp exe=/usr/lib/systemd/systemd-update-utmp hostname=? addr=? terminal=? res=success'
----
type=SYSTEM_BOOT msg=audit(Saturday 13 February 2021 A.368:8) : pid=622 uid=root auid=unset ses=unset subj=system_u:system_r:init_t:s0 msg=' comm=systemd-update-utmp exe=/usr/lib/systemd/systemd-update-utmp hostname=? addr=? terminal=? res=success'
$

Analysera systemd journal

Du bör ha en beständig systemd-journal för att behålla en beständig journal på disken annars kommer loggarna inte att kvarstå vid omstart. För detta kan du antingen göra ändringarna i /etc/systemd/journald.conf eller skapa katalogen själv med följande kommandon:

$ sudo mkdir /var/log/journal
$ sudo systemd-tmpfiles --create --prefix /var/log/journal 2>/dev/null
$ sudo systemctl -s SIGUSR1 kill systemd-journald

När du är klar kan du valfritt starta om systemet för att fånga mer än en omstartspost i journalen även om det inte krävs.

Använd kommandot nedan för att lista loggade stövlar från journalen:

$ journalctl --list-boots

Här är dess utdata på min server:

$ journalctl --list-boots
-15 8a7c8034da804ebb9cb063a7553ed0bf Wed 2020-11-18 23:09:05 IST—Wed 2020-11-18 23:17:10 IST
-14 7bbb9542778a4057a91b9d22fcf91735 Wed 2020-11-18 23:17:22 IST—Wed 2020-11-18 23:20:08 IST
-13 f2ee8a61bf4c4f67a12e012855d8b1c3 Wed 2020-11-18 23:20:17 IST—Wed 2020-11-18 23:23:01 IST
-12 1277d19a959f4c33ba944a68c5874d2a Fri 2020-12-11 10:32:44 IST—Fri 2020-12-11 10:43:39 IST
-11 eb4ff97f112445888a5946d1155de1b8 Fri 2020-12-11 10:43:55 IST—Fri 2020-12-11 10:48:18 IST
-10 bf46eff3f9a344d2b28a03ffbf7fff32 Fri 2020-12-11 19:04:30 IST—Fri 2020-12-11 19:31:01 IST
 -9 2acf08368667423c89086579f98efd82 Tue 2020-12-15 17:36:52 IST—Tue 2020-12-15 19:13:10 IST
 -8 b826f223a67d454b94d4413678870f08 Sat 2020-12-19 00:31:54 IST—Sat 2020-12-19 00:44:52 IST
 -7 011e1b29339041b0ae48bbb93fce792f Wed 2020-12-23 23:01:15 IST—Wed 2020-12-23 23:02:44 IST
 -6 f41f5880572e4394938c6dcb4a8b683c Mon 2020-12-28 16:54:11 IST—Mon 2020-12-28 22:54:22 IST
 -5 a2e638dc292a4db2b0a50dd442129c28 Tue 2020-12-29 17:02:16 IST—Tue 2020-12-29 19:39:38 IST
 -4 f6c738df872a48d48daee1962727cca5 Wed 2020-12-30 19:09:30 IST—Wed 2020-12-30 19:20:23 IST
 -3 c876e60ea371460b94e247b40270b18f Thu 2020-12-31 14:36:07 IST—Thu 2020-12-31 15:45:36 IST
 -2 a23c70804ec243f7868c18737f4b7e55 Sat 2021-02-13 20:09:30 IST—Sat 2021-02-13 20:10:44 IST
 -1 94b604a6bf75462dac8c4a4576fdc863 Sat 2021-02-13 20:10:59 IST—Sat 2021-02-13 20:23:18 IST
  0 3ff7e29fa0a34878b7574b7d4d3ccfb5 Sat 2021-02-13 20:24:57 IST—Sat 2021-02-13 21:13:15 IST
$

Som du kan se räcker det flera stövlar. För att ytterligare analysera en viss omstart, använd:

$ journalctl -b {num} -n

Här kommer {num} att vara indexet som ges i journalctl –list-boots-kommandot i den första kolumnen.

$ journalctl -b -1 -n
-- Logs begin at Wed 2020-11-18 23:09:05 IST, end at Sat 2021-02-13 21:13:39 IST. --
Feb 13 20:23:18 ubuntumate20vm systemd[1]: lvm2-monitor.service: Succeeded.
Feb 13 20:23:18 ubuntumate20vm systemd[1]: Stopped Monitoring of LVM2 mirrors, snapshots etc. using dmeventd or progress polling.
Feb 13 20:23:18 ubuntumate20vm systemd[1]: Reached target Shutdown.
Feb 13 20:23:18 ubuntumate20vm systemd[1]: Reached target Final Step.
Feb 13 20:23:18 ubuntumate20vm systemd[1]: systemd-poweroff.service: Succeeded.
Feb 13 20:23:18 ubuntumate20vm systemd[1]: Finished Power-Off.
Feb 13 20:23:18 ubuntumate20vm systemd[1]: Reached target Power-Off.
Feb 13 20:23:18 ubuntumate20vm systemd[1]: Shutting down.
Feb 13 20:23:18 ubuntumate20vm systemd-shutdown[1]: Syncing filesystems and block devices.
Feb 13 20:23:18 ubuntumate20vm systemd-journald[304]: Journal stopped
$

Du kan observera meddelanden som loggats i journalen i ovanstående utdata och kan spåra eventuella anomalier.

Slutsats

Det kanske inte alltid är möjligt att lokalisera orsaken till en Linux-omstart med ett enda kommando eller från en enda loggfil. Som sådan är det alltid praktiskt att känna till kommandon och loggar som fångar systemrelaterade händelser och kan förkorta tiden som krävs för att hitta grundorsaken.

Exemplen ovan ger dig en startplats för att börja din felsökning. Genom att använda en kombination av sådana verktyg och loggar kan du vara säker på att veta vad som hände och hur ditt system startade om.

Ta sedan reda på några av de lätta övervakningsprogramvaran för Linux.