Hvordan finder jeg Linux-genstartsårsagen?

Det sker ofte, at vi opdager, at et Linux-system er genstartet på en uplanlagt måde eller på grund af ukendte tilsyneladende årsager. At finde og løse årsagen kan hjælpe med at forhindre gentagelse af sådanne problemer og undgå uplanlagt nedetid.

Der er flere måder, vi kan finde ud af, hvad der udløste en genstart. I denne artikel vil vi diskutere disse måder, og hvordan du kan bruge tilgængelige værktøjer og logfiler i et Linux-system til at fejlfinde sådanne scenarier.

Undersøg genstartstid

Du kan kontrollere, hvornår systemet genstartede, med hvem og sidste kommandoer

$ 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
$

Tjek systemmeddelelser

Du kan yderligere korrelere den genstart, du vil diagnosticere, med systemmeddelelser.

For CentOS/RHEL-systemer finder du logfilerne på /var/log/messages, mens de for Ubuntu/Debian-systemer er logget på /var/log/syslog. Du kan blot bruge halekommandoen eller din foretrukne teksteditor til at filtrere eller finde specifikke data.

Som det kan udledes af nedenstående logfiler, foreslår sådanne poster en nedlukning/genstart initieret af en administrator eller root-bruger. Disse meddelelser kan variere afhængigt af OS-type og den måde, genstart/nedlukning udløses, men du vil altid finde nyttige oplysninger ved at se på systemlogfiler, selvom de måske ikke er eksplicitte nok til at identificere årsagen hver gang.

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.

En sådan kommando, som du kan bruge til at filtrere systemlogfiler fra, er givet nedenfor:

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'

Fangede hændelser er muligvis ikke altid specifikke. Spor altid hændelser, der giver tegn på advarsler eller fejl, som kan føre til, at systemet slukker/bryder ned.

  Sådan hoster du en Mumble-server på Linux

Bekræft reviderede logfiler

For systemer med auditd er det et godt sted at tjekke forskellige hændelser ved hjælp af ausearch-værktøjet. Brug nedenstående kommando til at kontrollere de sidste to poster fra revisionslogfiler.

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

Dette vil rapportere de to seneste lukninger eller genstarter. Hvis dette rapporterer en SYSTEM_SHUTDOWN efterfulgt af en SYSTEM_BOOT, burde alt være godt. Men hvis det rapporterer to SYSTEM_BOOT-linjer i træk eller kun en enkelt SYSTEM_BOOT-linje, er det højst sandsynligt, at systemet ikke lukkede ned elegant. Et normalt output bør være noget som nedenfor:

$ 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'
$

Nedenstående output viser to på hinanden følgende SYSTEM_BOOT-meddelelser, som kan indikere en ung nedlukning, selvom den skal korreleres med systemlogfiler.

$ 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'
$

Analyser systemd journal

Du bør have en vedvarende systemd-journal for at holde en vedvarende journal på disken, ellers vil logfilerne ikke blive ved ved genstart. Til dette kan du enten foretage ændringerne i /etc/systemd/journald.conf eller oprette mappen selv med nedenstående kommandoer:

$ 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 det er gjort, kan du valgfrit genstarte systemet for at fange mere end én genstartspost i journalen, selvom det ikke er påkrævet.

  De bedste Linux-distributioner til Mac-brugere

Brug nedenstående kommando til at liste loggede støvler fra journalen:

$ journalctl --list-boots

Her er dens output 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, holder den flere støvler. For yderligere at analysere en bestemt genstart, brug:

$ journalctl -b {num} -n

Her vil {num} være indekset givet i journalctl –list-boots-kommandoen i den første kolonne.

$ 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 observere meddelelser logget i journalen i ovenstående output og kan spore eventuelle uregelmæssigheder.

  Sådan spiller du Psychonauts på Linux

Konklusion

Det er muligvis ikke altid muligt at lokalisere årsagen til en Linux-genstart ved hjælp af en enkelt kommando eller fra en enkelt logfil. Som sådan er det altid praktisk at kende de kommandoer og logfiler, der fanger systemrelaterede hændelser og kan forkorte den tid, der kræves for at finde årsagen.

Ovenstående eksempler giver dig et udgangspunkt for at begynde din fejlfinding. Ved at bruge en kombination af sådanne værktøjer og logfiler kan du være sikker på at vide, hvad der skete, og hvordan dit system genstartede.

Find derefter ud af noget af letvægtsovervågningssoftwaren til Linux.