Câu trả lời:
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ó.
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
last -x shutdown
Có một vài điều cần kiểm tra:
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
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)
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)
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ả last
từ 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.
tac
lệnh
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 tail
lệnh là bạn của bạn.
Đơn giản hóa bằng cách sử dụng last
hiể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 shutdown
và reboot
:
last -x shutdown reboot
cat foo | grep bar
so sánh grep bar foo
, có vẻ như cuối cùng có khả năng tự lọc.
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/log
sẽ 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.
Đọc /etc/acpi/powerbtn-acpi-support.sh
bao 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 shutdown
lệ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.
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.sh
tệ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 acpid
gó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ể.
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
và /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ý.
acpi-support-base
và acpid
gó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?
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 last
và 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_history
tập tin của họ để xem họ đã dừng lại hay chưa.
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
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 shutdown
hiể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 -x
hiể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.
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
last -x
)
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
/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?