Làm thế nào để tìm ra từ các bản ghi những gì gây ra tắt hệ thống?


104

Ví dụ: tôi đang thấy điều này trong /var/log/messages:

Mar 01 23:12:34 hostname shutdown: shutting down for system halt

Có cách nào để tìm hiểu những gì gây ra tắt máy? Ví dụ: nó chạy từ bàn điều khiển, hoặc ai đó nhấn nút nguồn, v.v.?


2
Vì vậy, lần này đã có một số may mắn với /var/log/acpid: hóa ra nút nguồn đã được nhấn. Bất kỳ ý tưởng nào khác, tìm ở đâu nếu acpid không đưa ra manh mối?
alex

Câu trả lời:


45

Chỉ các chương trình đặc quyền root mới có thể tắt hệ thống một cách duyên dáng. Vì vậy, khi một hệ thống tắt theo cách thông thường, đó là người dùng có quyền root hoặc tập lệnh acpi. Trong cả hai trường hợp, bạn có thể tìm ra bằng cách kiểm tra nhật ký. Tắt máy acpi có thể do nhấn nút nguồn, quá nóng hoặc pin yếu (máy tính xách tay). Tôi quên mất lý do thứ ba, phần mềm UPS khi nguồn điện bị hỏng, dù sao cũng sẽ gửi cảnh báo.

Gần đây tôi có một hệ thống bắt đầu tắt nguồn một cách vô duyên, hóa ra nó quá nóng và mobo được cấu hình để tắt nguồn sớm. Hệ thống không có cơ hội lưu nhật ký, nhưng may mắn thay, theo dõi nhiệt độ của hệ thống cho thấy nó đã bắt đầu tăng ngay trước khi tắt nguồn.

Vì vậy, nếu đó là tắt máy bình thường, nó sẽ được ghi lại, nếu đó là một sự xâm nhập ... chúc may mắn và nếu đó là tắt máy lạnh, cơ hội tốt nhất của bạn để biết là kiểm soát và giám sát môi trường của nó.


118

Hãy thử các lệnh sau:

Hiển thị danh sách các mục khởi động lại cuối cùng: last reboot | less

Hiển thị danh sách các mục tắt máy cuối cùng: last -x | less

hoặc chính xác hơn: last -x | grep shutdown | less

Bạn sẽ không biết ai đã làm điều đó. Nếu bạn muốn biết ai đã làm điều đó, bạn sẽ cần thêm một chút mã có nghĩa là bạn sẽ biết lần sau.

Tôi đã tìm thấy tài nguyên này trực tuyến. Nó có thể hữu ích cho bạn:

Làm thế nào để tìm ra ai hoặc cái gì đã dừng hệ thống của tôi


25
Chà, điều này không cho tôi biết điều gì đã gây ra tắt máy, chỉ khi nó được thực hiện. Mà tôi đã biết, xem câu hỏi của tôi.
alex

1
chính xác hơnlast -x shutdown
Rahul Patil

5
Downvote, vì nó không trả lời câu hỏi.
toogley

1
Liên kết cụ thể là "Làm cách nào để tìm ra ai hoặc cái gì đã tạm dừng hệ thống của tôi (Old Sco Unix)? "
Wolfgang

16

Có một vài điều cần kiểm tra:

Kiểm tra đầu ra của lệnh -x cuối cùng

Chạy lệnh này * và so sánh đầu ra với các ví dụ dưới đây:

last -x | head | tac

Ví dụ tắt máy bình thường

Tắt máy và bật nguồn bình thường trông như thế này (lưu ý rằng bạn có một sự kiện tắt máy và sau đó là một sự kiện khởi động hệ thống):

runlevel (to lvl 0)   2.6.32- Sat Mar 17 08:48 - 08:51  (00:02) 
shutdown system down  ... <-- first the system shuts down   
reboot   system boot  ... <-- afterwards the system boots
runlevel (to lvl 3)       

Trong một số trường hợp, bạn có thể thấy điều này (lưu ý rằng không có dòng nào về việc tắt máy nhưng hệ thống ở trạng thái runlevel 0 là "trạng thái tạm dừng"):

runlevel (to lvl 0)   ... <-- first the system shuts down (init level 0)
reboot   system boot  ... <-- afterwards the system boots
runlevel (to lvl 2)   2.6.24-... Fri Aug 10 15:58 - 15:32 (2+23:34)   

Ví dụ tắt máy bất ngờ

Việc tắt đột ngột do mất điện trông như thế này (lưu ý rằng bạn có một sự kiện khởi động hệ thống mà không có sự kiện tắt hệ thống trước đó):

runlevel (to lvl 3)   ... <-- the system was running since this momemnt
reboot   system boot  ... <-- then we've a boot WITHOUT a prior shutdown
runlevel (to lvl 3)   3.10.0-693.21.1. Sun Jun 17 15:40 - 09:51  (18:11)    

Kiểm tra nhật ký trong / var / log

Lệnh bash để lọc các thông điệp tường trình thú vị nhất là:

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'

Khi mất điện đột xuất hoặc lỗi phần cứng xảy ra, các hệ thống tập tin sẽ không được ngắt kết nối chính xác để trong lần khởi động tiếp theo, bạn có thể nhận được các bản ghi như thế này:

EXT4-fs ... INFO: recovery required ... 
Starting XFS recovery filesystem ...
systemd-fsck: ... recovering journal
systemd-journald: File /var/log/journal/.../system.journal corrupted or uncleanly shut down, renaming and replacing.

Khi hệ thống tắt vì người dùng nhấn nút nguồn, bạn sẽ nhận được các bản ghi như thế này:

systemd-logind: Power key pressed.
systemd-logind: Powering Off...
systemd-logind: System is powering down.

Chỉ khi hệ thống tắt trật tự, bạn mới có được nhật ký như thế này:

rsyslogd: ... exiting on signal 15

Khi hệ thống tắt do quá nóng, bạn sẽ nhận được các bản ghi như thế này:

critical temperature reached...,shutting down

Nếu bạn có một UPS và chạy một daemon để theo dõi nguồn và tắt máy, rõ ràng bạn nên kiểm tra nhật ký của nó (NUT log trên / var / log / message nhưng nhật ký apcupsd trên / var / log / apcupsd *)


Ghi chú

*: Đây là mô tả lasttừ trang người đàn ông của nó:

last [...] prints information about connect times of users. 
Records are printed from most recent to least recent.  
[...]
The special users reboot and shutdown log in when the system reboots
or (surprise) shuts down. 

Chúng tôi sử dụng headđể giữ 10 sự kiện mới nhất và chúng tôi sử dụng tacđể đảo ngược thứ tự để chúng tôi không bị nhầm lẫn bởi thực tế là các bản in cuối cùng từ sự kiện gần đây nhất đến gần đây nhất.


Câu trả lời tốt. Trong debian 9 của tôi, tôi đã không thấy dòng "runlevel (đến lv 0)" để tắt máy bình thường.
Jruv

@jruv bạn thích gì? Tôi đoán nó đã bị "tắt hệ thống"
ndemou

đây là một ví dụ tuyệt vời nhưng có thể có lợi ích khi được làm lại mà không cần taclệnh
mbigras

kiểm tra / var / log, đó là một lệnh hay và thông tin được viết tốt. cảm ơn!
Howard Lee

11

Một số tệp nhật ký có thể khám phá: (tìm thấy một hệ thống Ubuntu, nhưng tôi hy vọng rằng chúng có mặt trên hầu hết các hệ thống Linux / Unix)

/var/log/debug
/var/log/syslog (will be pretty full and may be harder to browse)
/var/log/user.log
/var/log/kern.log
/var/log/boot

Một lần nữa, các tệp nhật ký này có mặt trên một hệ thống Ubuntu, vì vậy tên tệp có thể khác nhau. Các taillệnh là bạn của bạn.


8

Đơn giản hóa bằng cách sử dụng lasthiển thị các mục tắt máy hệ thống và chạy thay đổi cấp độ và lọc trên shutdownreboot:

last -x shutdown reboot

1
ndefontenay đã đề cập rằng. Cảm ơn bạn đã đóng góp, nhưng xin vui lòng đọc câu trả lời hiện có trước.
Gilles

Tôi mặc dù câu trả lời của tôi đã đơn giản hóa ndefontenay một, nhưng cảm ơn.
jhvaras

1
@gilles Tôi phải nói điều này là khác biệt một cách tinh tế, theo cách cat foo | grep barso sánh grep bar foo, có vẻ như cuối cùng có khả năng tự lọc.
xenoterracide

8

Không hoàn toàn thỏa mãn

Tôi có một nhu cầu tương tự trên Debian 7.8 và nhận thấy rằng về cơ bản không có thông báo rõ ràng và rõ ràng trong nhật ký, điều này hơi đáng ngạc nhiên.

Grep thông qua /var/logsẽ cho biết thời gian máy bị tắt, hiển thị tắt máy daemon thích hợp, v.v., nhưng không phải là lý do ban đầu.

shutdown[25861]: shutting down for system halt

Các giải pháp khác được đề cập ( last -x) không giúp được nhiều.

Nhìn cách nó hoạt động

Đọc /etc/acpi/powerbtn-acpi-support.shbao gồm:

if [-x /etc/acpi/powerbtn.sh]; sau đó
    # Khả năng tương thích với tập lệnh cấu hình cũ từ gói acpid
    /etc/acpi/powerbtn.sh
elif [-x /etc/acpi/powerbtn.sh.dpkg-bak]; sau đó
        # Khả năng tương thích với tập lệnh cấu hình cũ từ gói acpid
    # vẫn còn bởi vì nó đã được thay đổi bởi quản trị viên
        /etc/acpi/powerbtn.sh.dpkg-bak
khác
    # Xử lý bình thường.
    / sbin / shutdown -h -P now "Nhấn nút nguồn"
fi

Lưu ý rằng một văn bản rõ ràng được đưa ra như là tham số của shutdownlệnh. Tôi hy vọng chuỗi đó sẽ được ghi lại tự động bởi chương trình tắt máy.

Điều chỉnh cho nhật ký tốt hơn

Dù sao, để có được một tin nhắn rõ ràng, tôi đặt văn bản bên dưới (dưới dạng root) trong một /etc/acpi/powerbtn.shtệp thực thi mới được tạo vớichmod a+x /etc/acpi/powerbtn.sh

#! / thùng / sh
logger trong /etc/acpi/powerbtn.sh, có lẽ là "Nhấn nút nguồn"
    / sbin / shutdown -h -P now "Nhấn nút nguồn"

Làm theo cách này có thể sẽ tạo ra một sự thay đổi lâu dài hơn là sửa đổi /etc/acpi/powerbtn-acpi-support.sh. Tùy chọn thứ hai có thể sẽ mất tác dụng trong lần nâng cấp gói tiếp theo acpi-support-base.

Lưu ý so với Ubuntu 14.04, nó khác ( /etc/acpi/powerbtn.shđã tồn tại với nội dung khác với acpidgói). Ngoài ra, Debian 8 có thể làm điều đó khác đi. Hãy cung cấp các biến thể.

Lợi nhuận!

Và bây giờ khi nút nguồn được nhấn, một dòng như bên dưới xuất hiện trong /var/log/messages, /var/log/syslog/var/log/user.log:

logger: in /etc/acpi/powerbtn.sh, presumably Power button pressed

Bây giờ đó là một thông điệp rõ ràng trong nhật ký.


Cảm ơn @Bielecki đã đề nghị xem xét cài đặt acpi-support-baseacpidgói. Tôi đã không kiểm tra bản thân mình. Bạn có thể giải thích về phân phối và phiên bản mà nó mang lại lợi ích?
Stéphane Gourmetichon

4

Tôi chỉ có một ý tưởng vụng về, nhưng có lẽ nó hiệu quả với bạn: nhập lệnh lastvà kiểm tra thông tin đăng nhập cho tất cả người dùng. sau đó, lọc người dùng với sự cho phép cần thiết cho haltđiều đó đã được đăng nhập tại thời điểm đó. sau đó kiểm tra .bash_historytập tin của họ để xem họ đã dừng lại hay chưa.


1

Trong trường hợp của tôi, tôi gặp vấn đề quá nhiệt và tìm thấy nhật ký trong / var / log / syslog bởi một thư mục 'grep shut *' trong / var / log.

Lỗi được ghi lại là:

Feb 23 15:59:49 luca-LIFEBOOK-A530 kernel: [24746.497174] thermal thermal_zone0: critical temperature reached(99 C),shutting down

1

Chỉ cần gắn chip vào máy ảo KVM của tôi (nơi tôi tự hỏi liệu máy chủ khởi động lại có tắt máy khách không), tôi đã tìm thấy những gì tôi cần /var/log/auth.log(ngoài việc last -x shutdownhiển thị tương tự). Có những dòng này hiện lên:

Sep  3 23:56:31 Web systemd-logind[531]: Power key pressed.
Sep  3 23:56:31 Web systemd-logind[531]: Powering Off...
Sep  3 23:56:31 Web systemd-logind[531]: System is powering down.
Sep  3 23:55:45 Web systemd-logind[591]: New seat seat0.
Sep  3 23:55:45 Web systemd-logind[591]: Watching system buttons on /dev/input/event0 (Power Button)
Sep  3 23:55:54 Web sshd[805]: Server listening on 0.0.0.0 port 22.
Sep  3 23:55:54 Web sshd[805]: Server listening on :: port 22.

last -xhiển thị các dòng này, lưu ý rằng chúng đang được in theo thứ tự gần đây nhất (nghĩa là đọc dòng cuối cùng trước, sau đó đi lên), nhưng do thiết lập lại đồng hồ (23:56 trước khi khởi động, 23:55 sau) cũng thấy rõ trong các dòng trước, thứ tự có vẻ hơi hoang mang:

runlevel (to lvl 2)   3.13.0-129-gener Sun Sep  3 23:55 - 22:04  (22:08)    
reboot   system boot  3.13.0-129-gener Sun Sep  3 23:55 - 22:04  (22:08)    
shutdown system down  3.13.0-123-gener Sun Sep  3 23:56 - 23:55  (00:00)    
runlevel (to lvl 0)   3.13.0-123-gener Sun Sep  3 23:56 - 23:56  (00:00)

Về phần tôi, kiểm tra xem khách có tắt máy sạch khi máy chủ được khởi động không, tôi cũng có thể đăng nhập vào (ssh) một trong những khách và ở đó khi tôi khởi động máy chủ, nhận các dòng này trong thiết bị đầu cuối:

root@Web:~#
Broadcast message from root@Web
        (unknown) at 22:25 ...

The system is going down for power off NOW!
Connection to web closed by remote host.
Connection to web closed.

0

bí danh tắt máy cho tập lệnh
, tập lệnh phải cung cấp tất cả các tham số, v.v. để thực thi tắt máy ban đầu
NHƯNG: tập lệnh phải ghi lại những tập lệnh này


2
Kịch bản tắt máy đã thực hiện điều này rồi ( last -x)
forcefsck

-1
cat /usr/adm/syslog

trong trường hợp của tôi, đó là phần mềm up tắt máy chủ.

/etc/rc.d/7/upsd.boot

Điều này không cung cấp một câu trả lời cho câu hỏi. Một khi bạn có đủ danh tiếng, bạn sẽ có thể nhận xét về bất kỳ bài đăng nào ; thay vào đó, cung cấp câu trả lời không yêu cầu làm rõ từ người hỏi . - Từ đánh giá
Jeff Schaller

@JeffSchaller Tôi nghĩ đó là một câu trả lời, chỉ không phải là một câu trả lời rất tốt.
dùng259412
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.