Како пронаћи разлог поновног покретања Линука?

Nije retkost da se susretnemo sa situacijom gde se Linux sistem iznenada restartuje, bez jasnog razloga. Identifikacija i rešavanje uzroka ovakvih ponovnih pokretanja ključno je za sprečavanje budućih problema i izbegavanje neželjenih prekida u radu.

Postoji nekoliko načina da se istraži šta je dovelo do ponovnog pokretanja sistema. U ovom tekstu ćemo analizirati te metode, kao i kako iskoristiti raspoložive alate i sistemske zapise za efikasno rešavanje takvih problema.

Provera vremena ponovnog pokretanja

Vreme kada je došlo do restartovanja sistema možete utvrditi pomoću komandi who i last.

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

Analiza sistemskih poruka

Dalje, možete povezati ponovno pokretanje koje istražujete sa porukama u sistemskim logovima.

Na CentOS/RHEL sistemima, zapisi se čuvaju u /var/log/messages, dok se na Ubuntu/Debian sistemima nalaze u /var/log/syslog. Možete koristiti komandu tail ili bilo koji tekst editor da pregledate specifične informacije.

Kao što se može videti iz donjih zapisa, ovakvi unosi ukazuju na isključivanje/restart koji je iniciran od strane administratora ili root korisnika. Ove poruke mogu varirati u zavisnosti od tipa operativnog sistema i načina na koji se vrši restartovanje ili gašenje, ali sistemski logovi uvek pružaju korisne informacije, iako ne moraju uvek biti dovoljni za precizno utvrđivanje uzroka.

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.

Komanda ispod može vam pomoći da filtrirate sistemske zapise:

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'

Zabeleženi događaji ne moraju uvek biti specifični. Obratite pažnju na događaje koji ukazuju na upozorenja ili greške koje bi mogle dovesti do isključivanja ili pada sistema.

Provera Auditd Logova

Za sisteme koji koriste auditd, to je idealno mesto za proveru različitih događaja pomoću alata ausearch. Sledeća komanda prikazuje poslednja dva unosa iz logova revizije.

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

Ova komanda će prikazati poslednja dva isključivanja ili ponovna pokretanja. Ukoliko se prijavi SYSTEM_SHUTDOWN praćen sa SYSTEM_BOOT, to je dobar znak. Međutim, ako se prikazuju dva SYSTEM_BOOT unosa uzastopno ili samo jedan SYSTEM_BOOT unos, sistem se najverovatnije nije isključio na pravilan način. Tipičan izlaz bi trebalo da izgleda ovako:

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

U sledećem primeru, prikazane su dve uzastopne SYSTEM_BOOT poruke, što može ukazivati na nepravilno gašenje, iako je neophodno proveriti i druge sistemske logove.

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

Analiziranje Systemd Dnevnika

Neophodno je da imate trajni sistemski dnevnik kako bi se zapisi čuvali na disku, u suprotnom se logovi brišu nakon ponovnog pokretanja sistema. Da biste to omogućili, možete modifikovati /etc/systemd/journald.conf ili kreirati direktorijum ručno pomoću sledećih komandi:

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

Nakon toga, možete opcionalno restartovati sistem kako bi zabeležio više od jednog unosa za ponovno pokretanje u dnevniku, iako to nije neophodno.

Koristite sledeću komandu za prikaz zabeleženih pokretanja iz dnevnika:

$ journalctl --list-boots

Evo primera izlaza na mom serveru:

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

Kao što se može videti, lista sadrži više pokretanja. Za detaljniju analizu određenog ponovnog pokretanja koristite:

$ journalctl -b {num} -n

Ovde je {num} indeks koji je prikazan u prvoj koloni komande journalctl --list-boots.

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

U izlazu iznad, možete analizirati poruke zabeležene u dnevniku i pratiti eventualne anomalije.

Zaključak

Nije uvek moguće utvrditi uzrok ponovnog pokretanja Linux sistema samo jednom komandom ili iz jednog log fajla. Stoga je veoma korisno znati koje komande i logovi prate sistemske događaje, što može značajno skratiti vreme potrebno za identifikaciju osnovnog uzroka problema.

Navedeni primeri služe kao dobar početak u procesu rešavanja ovakvih problema. Korišćenjem kombinacije ovakvih alata i evidencija, možete sa sigurnošću utvrditi šta se dogodilo i zbog čega se vaš sistem ponovo pokrenuo.

U nastavku možete istražiti neke od laganih softvera za nadzor Linux sistema.