Bieži gadās, ka mēs atklājam, ka Linux sistēma ir pārstartēta neplānotā veidā vai nezināmu acīmredzamu iemeslu dēļ. Pamatcēloņa atrašana un novēršana var palīdzēt novērst šādu problēmu atkārtošanos un izvairīties no neplānotas dīkstāves.
Ir vairāki veidi, kā mēs varam noskaidrot, kas izraisīja atsāknēšanu. Šajā rakstā mēs apspriedīsim šos veidus un to, kā varat izmantot pieejamās utilītas un žurnālus Linux sistēmā, lai novērstu šādus scenārijus.
Pārbaudiet atsāknēšanas laiku
Varat pārbaudīt, kad notika sistēmas atsāknēšana ar kurš un pēdējām komandām
$ 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 $
Pārbaudiet sistēmas ziņojumus
Varat vēl vairāk saistīt atkārtotu palaišanu, kuru vēlaties diagnosticēt, ar sistēmas ziņojumiem.
CentOS/RHEL sistēmām žurnāli ir atrodami vietnē /var/log/messages, savukārt Ubuntu/Debian sistēmām tie ir reģistrēti vietnē /var/log/syslog. Varat vienkārši izmantot asti komandu vai savu iecienītāko teksta redaktoru, lai filtrētu vai atrastu konkrētus datus.
Kā var secināt no tālāk norādītajiem žurnāliem, šādi ieraksti liecina par izslēgšanu/atsāknēšanu, ko ierosinājis administrators vai root lietotājs. Šie ziņojumi var atšķirties atkarībā no OS veida un veida, kā tiek aktivizēta atsāknēšana/izslēgšana, taču jūs vienmēr atradīsit noderīgu informāciju, apskatot sistēmas žurnālus, lai gan tā var nebūt pietiekami skaidra, lai katru reizi noteiktu cēloni.
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.
Tālāk ir norādīta viena no šādām komandām, ko varat izmantot, lai filtrētu sistēmas žurnālus:
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'
Uzņemtie notikumi ne vienmēr var būt specifiski. Vienmēr izsekojiet notikumus, kas rada brīdinājumu vai kļūdu pazīmes, kas var izraisīt sistēmas izslēgšanos/avāriju.
Pārbaudiet auditētos žurnālus
Sistēmām ar auditu tā ir lieliska vieta dažādu notikumu pārbaudei, izmantojot ausearch rīku. Izmantojiet tālāk norādīto komandu, lai pārbaudītu pēdējos divus ierakstus no audita žurnāliem.
$ sudo ausearch -i -m system_boot,system_shutdown | tail -4
Tas ziņos par diviem pēdējiem izslēgšanas vai atsāknēšanas gadījumiem. Ja tiek ziņots par SYSTEM_SHUTDOWN, kam seko SYSTEM_BOOT, visam vajadzētu būt labi. Bet, ja tas ziņo par divām SYSTEM_BOOT rindām pēc kārtas vai tikai par vienu SYSTEM_BOOT rindiņu, visticamāk, sistēma netika graciozi izslēgta. Parastajai izvadei vajadzētu būt apmēram šādai:
$ 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' $
Zemāk esošajā izvadē ir uzskaitīti divi secīgi SYSTEM_BOOT ziņojumi, kas var liecināt par nepareizu izslēgšanu, lai gan tai ir jābūt saistītai ar sistēmas žurnāliem.
$ 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' $
Analizējiet sistēmisko žurnālu
Lai diskā saglabātu pastāvīgu žurnālu, jums ir jābūt pastāvīgam systemd-žurnālam, pretējā gadījumā žurnāli netiks saglabāti pēc atkārtotas palaišanas. Šim nolūkam varat veikt izmaiņas failā /etc/systemd/journald.conf vai pats izveidot direktoriju, izmantojot tālāk norādītās komandas:
$ sudo mkdir /var/log/journal $ sudo systemd-tmpfiles --create --prefix /var/log/journal 2>/dev/null $ sudo systemctl -s SIGUSR1 kill systemd-journald
Kad tas ir izdarīts, varat pēc izvēles atsāknēt sistēmu, lai žurnālā ierakstītu vairāk nekā vienu atsāknēšanas ierakstu, lai gan tas nav nepieciešams.
Izmantojiet tālāk norādīto komandu, lai uzskaitītu reģistrētos sāknēšanas datus no žurnāla:
$ journalctl --list-boots
Šeit ir tā izvade manā 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 $
Kā redzat, šis saraksts ilgst vairākus zābakus. Lai sīkāk analizētu konkrētu atsāknēšanu, izmantojiet:
$ journalctl -b {num} -n
Šeit {num} būs indekss, kas norādīts komandā journalctl –list-boots pirmajā kolonnā.
$ 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 $
Iepriekš minētajā izvadā varat novērot žurnālā reģistrētos ziņojumus un izsekot anomālijām, ja tādas ir.
Secinājums
Ne vienmēr var būt iespējams precīzi noteikt Linux atsāknēšanas cēloni, izmantojot vienu komandu vai no viena žurnālfaila. Tāpēc vienmēr ir noderīgi zināt komandas un žurnālus, kas tver ar sistēmu saistītus notikumus un var saīsināt laiku, kas nepieciešams, lai atrastu galveno cēloni.
Iepriekš minētie piemēri sniedz jums sākumpunktu problēmu novēršanas sākšanai. Izmantojot šādu rīku un žurnālu kombināciju, varat būt pārliecināts, ka zināt, kas notika un kā sistēma tika atsāknēta.
Pēc tam uzziniet dažas vieglās pārraudzības programmatūras operētājsistēmai Linux.