Πώς να βρείτε τον λόγο επανεκκίνησης του Linux;

Συμβαίνει συχνά να βρίσκουμε ότι ένα σύστημα Linux έχει επανεκκινηθεί με απρογραμμάτιστο τρόπο ή για άγνωστους προφανείς λόγους. Η εύρεση και η επίλυση της βασικής αιτίας μπορεί να βοηθήσει στην πρόληψη της επανεμφάνισης τέτοιων ζητημάτων και στην αποφυγή απρογραμμάτιστων διακοπών.

Υπάρχουν διάφοροι τρόποι με τους οποίους μπορούμε να μάθουμε τι πυροδότησε μια επανεκκίνηση. Σε αυτό το άρθρο, θα συζητήσουμε αυτούς τους τρόπους και πώς μπορείτε να χρησιμοποιήσετε τα διαθέσιμα βοηθητικά προγράμματα και αρχεία καταγραφής σε ένα σύστημα Linux για την αντιμετώπιση προβλημάτων τέτοιων σεναρίων.

Ελέγξτε την ώρα επανεκκίνησης

Μπορείτε να ελέγξετε πότε έγινε η επανεκκίνηση του συστήματος με τις εντολές who και 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
$

Ελέγξτε τα μηνύματα συστήματος

Μπορείτε να συσχετίσετε περαιτέρω την επανεκκίνηση που θέλετε να διαγνώσετε με μηνύματα συστήματος.

Για συστήματα CentOS/RHEL, θα βρείτε τα αρχεία καταγραφής στο /var/log/messages ενώ για τα συστήματα Ubuntu/Debian, καταγράφονται στο /var/log/syslog. Μπορείτε απλά να χρησιμοποιήσετε την εντολή tail ή το αγαπημένο σας πρόγραμμα επεξεργασίας κειμένου για να φιλτράρετε ή να βρείτε συγκεκριμένα δεδομένα.

Όπως μπορεί να συναχθεί από τα παρακάτω αρχεία καταγραφής, τέτοιες εγγραφές υποδηλώνουν τερματισμό/επανεκκίνηση που ξεκίνησε από έναν διαχειριστή ή χρήστη root. Αυτά τα μηνύματα μπορεί να διαφέρουν ανάλογα με τον τύπο του λειτουργικού συστήματος και τον τρόπο με τον οποίο ενεργοποιείται η επανεκκίνηση/τερματισμός, αλλά θα βρείτε πάντα χρήσιμες πληροφορίες κοιτάζοντας τα αρχεία καταγραφής του συστήματος, αν και μπορεί να μην είναι αρκετά σαφές για να εντοπίσετε την αιτία κάθε φορά.

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.

Μια τέτοια εντολή που μπορείτε να χρησιμοποιήσετε για να φιλτράρετε τα αρχεία καταγραφής συστήματος δίνεται παρακάτω:

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'

Τα συμβάντα που καταγράφονται μπορεί να μην είναι πάντα συγκεκριμένα. Πάντα να εντοπίζετε συμβάντα που δίνουν σημάδια προειδοποιήσεων ή σφαλμάτων που μπορεί να οδηγήσουν σε απενεργοποίηση/κατάρρευση του συστήματος.

  Πώς να εξαγάγετε αρχεία RAR στο Linux

Επαληθεύστε τα ελεγμένα αρχεία καταγραφής

Για συστήματα με έλεγχο, είναι ένα εξαιρετικό μέρος για να ελέγξετε διαφορετικά συμβάντα χρησιμοποιώντας το εργαλείο αναζήτησης. Χρησιμοποιήστε την παρακάτω εντολή για να ελέγξετε τις δύο τελευταίες εγγραφές από τα αρχεία καταγραφής ελέγχου.

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

Αυτό θα αναφέρει τους δύο πιο πρόσφατους τερματισμούς λειτουργίας ή επανεκκινήσεις. Εάν αυτό αναφέρει ένα SYSTEM_SHUTDOWN ακολουθούμενο από ένα SYSTEM_BOOT, όλα θα πρέπει να είναι καλά. Αλλά, εάν αναφέρει δύο γραμμές SYSTEM_BOOT στη σειρά ή μόνο μία γραμμή SYSTEM_BOOT, τότε πιθανότατα το σύστημα δεν έκλεισε με χάρη. Μια κανονική έξοδος θα πρέπει να είναι κάτι σαν το παρακάτω:

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

Η παρακάτω έξοδος παραθέτει δύο διαδοχικά μηνύματα SYSTEM_BOOT, τα οποία μπορεί να υποδεικνύουν έναν άχαρο τερματισμό λειτουργίας, αν και πρέπει να συσχετιστεί με αρχεία καταγραφής συστήματος.

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

Αναλύστε το συστημικό περιοδικό

Θα πρέπει να έχετε ένα μόνιμο ημερολόγιο systemd για να διατηρείτε ένα μόνιμο ημερολόγιο στο δίσκο, διαφορετικά τα αρχεία καταγραφής δεν θα διατηρηθούν κατά την επανεκκίνηση. Για αυτό, μπορείτε είτε να κάνετε τις αλλαγές στο /etc/systemd/journald.conf είτε να δημιουργήσετε τον κατάλογο μόνοι σας με τις παρακάτω εντολές:

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

Μόλις τελειώσετε, μπορείτε προαιρετικά να επανεκκινήσετε το σύστημα για να καταγράψετε περισσότερες από μία καταχωρήσεις επανεκκίνησης στο ημερολόγιο, αν και δεν απαιτείται.

  Πώς να παρακολουθείτε την CPU και τη μνήμη στο Linux;

Χρησιμοποιήστε την παρακάτω εντολή για να παραθέσετε τις καταχωρημένες μπότες από το περιοδικό:

$ journalctl --list-boots

Εδώ είναι η έξοδος του στον διακομιστή μου:

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

Όπως μπορείτε να δείτε, η λίστα διαρκεί αρκετές μπότες. Για περαιτέρω ανάλυση μιας συγκεκριμένης επανεκκίνησης, χρησιμοποιήστε:

$ journalctl -b {num} -n

Εδώ το {num} θα είναι το ευρετήριο που δίνεται στην εντολή 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
$

Μπορείτε να παρατηρήσετε μηνύματα που έχουν καταγραφεί στο περιοδικό στην παραπάνω έξοδο και μπορείτε να εντοπίσετε τις ανωμαλίες εάν υπάρχουν.

  Τα 5 καλύτερα φορητά λειτουργικά συστήματα Linux

συμπέρασμα

Ενδέχεται να μην είναι πάντα δυνατός ο εντοπισμός της αιτίας μιας επανεκκίνησης του Linux χρησιμοποιώντας μία μόνο εντολή ή από ένα μεμονωμένο αρχείο καταγραφής. Ως εκ τούτου, είναι πάντα χρήσιμο να γνωρίζετε τις εντολές και τα αρχεία καταγραφής που καταγράφουν συμβάντα που σχετίζονται με το σύστημα και μπορούν να συντομεύσουν τον χρόνο που απαιτείται για την εύρεση της βασικής αιτίας.

Τα παραπάνω παραδείγματα σάς παρέχουν ένα σημείο εκκίνησης για να ξεκινήσετε την αντιμετώπιση προβλημάτων. Χρησιμοποιώντας έναν συνδυασμό τέτοιων εργαλείων και αρχείων καταγραφής, μπορείτε να είστε σίγουροι ότι θα μάθετε τι συνέβη και πώς έγινε επανεκκίνηση του συστήματός σας.

Στη συνέχεια, μάθετε μερικά από τα ελαφρύ λογισμικό παρακολούθησης για Linux.