例如。我在/var/log/messages中看到了这个问题:

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


是否有办法找出导致关机的原因?例如。是从控制台运行还是有人按下电源按钮等?

评论

所以这一次/ var / log / acpid有点运气:原来电源按钮被按下了。还有其他想法,如果acpid不给您提示,该去哪里找?

#1 楼

只有root特权程序才能正常关闭系统。因此,当系统以正常方式关闭时,它要么是具有root特权的用户,要么是acpi脚本。在这两种情况下,您都可以通过检查日志来查找。按下电源按钮,过热或电池电量不足(笔记本电脑)可能会导致acpi关闭。我忘记了第三个原因,当电源出现故障时,UPS软件仍然会发出警报。

最近,我有一个系统反复启动,不正常地断电,原来是过热和主板配置为仅在早期关闭电源。该系统没有保存日志的机会,但是幸运的是,监视系统的温度表明它刚在关闭电源之前就开始升高。

因此,如果是正常关机,它将被记录下来,如果这是一个入侵...祝你好运,如果是冷关机,那么您最好的机会就是控制和监视其环境。

#2 楼

尝试以下命令:

显示上一次重新启动项的列表:
last reboot | less

显示上一次关闭的项列表:
last -x | less
< br或更准确地说:
last -x | grep shutdown | less

但是您不知道是谁做的。如果您想知道是谁做的,则需要添加一些代码,这意味着您下次就可以知道。

我已经在线找到了此资源。这可能对您有用:

如何找出谁或什么使我的系统暂停

评论


好吧,这并没有告诉我是什么原因导致了关机,而只是在完成时才告诉我。我已经知道,请参阅我的问题。

– alex
2011年4月5日在6:22

更准确地说是last -x shutdown

–拉胡尔·帕蒂尔(Rahul Patil)
2013年6月10日5:49

该链接专门指向“如何找出谁或什么使我的系统停止运行(Old Sco Unix)?”。

–沃尔夫冈
17年6月20日在19:14

最后是什么?如何安装?

–Sören
20-04-22在17:59

运行上一次重新引导后,突然重启后我每次都拥有一个新的内核版本。这使我在/etc/apt/apt.conf.d/50unattended-upgrades和/etc/apt/apt.conf.d/99custom-unattended-upgrades中查看了无人值守升级。请在这里查看我的答案以获取更多详细信息:askubuntu.com/a/1261057/119592

–佐尔坦
20年7月22日在9:12

#3 楼

TLDR
使用这2条命令并继续阅读以获取更多信息。
last -x | head | tac

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'

1)关于last -x命令的输出
运行此命令*并将输出与示例进行比较如下:
last -x | head | tac

正常关机示例
正常关机和开机看起来像这样(请注意,您先关机然后再启动系统):
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)       

在某些情况下,您可能会看到此信息(请注意,有关关闭的信息不存在,但是系统处于运行级别0(即“暂停状态”)):
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)   

意外的关闭示例
因断电而意外关闭的情况如下所示(请注意,您有一个系统启动事件,没有一个先前的系统关闭事件):
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)    

2)关于/ var / log /
用来过滤最有趣的日志消息的bash命令是这样的:
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'

当意外关闭电源或发生硬件故障时,文件系统将无法正确卸载,因此在下次启动时您可能会收到这样的日志:
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.

由于用户按下电源按钮而关闭系统电源时,您会看到以下日志:
systemd-logind: Power key pressed.
systemd-logind: Powering Off...
systemd-logind: System is powering down.

仅当系统有序关闭时,得到这样的日志:
rsyslogd: ... exiting on signal 15

由于过热而关闭系统时,您得到这样的日志:关闭时,您显然应该检查其日志(NUT日志位于/ var / log / messages,但apcupsd日志位于/ var / log / apcupsd *)

注意事项
*:这是last从它的手册页:
critical temperature reached...,shutting down

我们使用head来保存最新的10个事件,并且使用tac来反转顺序,这样我们就不会对最后打印从最新到最近的事实感到困惑事件。

#4 楼

一些可能需要探索的日志文件:(找到了Ubuntu系统,但我希望它们在大多数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


再次,这些日志文件存在于Ubuntu系统上,因此文件名可能不同。 tail命令是您的朋友。

#5 楼

不能完全满足

我对Debian 7.8也有类似的需求,并观察到日志中基本上没有清晰明确的消息,这有点令人惊讶。

通过/var/log的Grep会告诉计算机关闭的时间,显示正确的守护程序关闭等信息,但不是最初的原因。
shutdown[25861]: shutting down for system halt


提到的其他解决方案(last -x)没有帮助

了解其工作原理

阅读/etc/acpi/powerbtn-acpi-support.sh,其中包括:

if [ -x /etc/acpi/powerbtn.sh ] ; then
    # Compatibility with old config script from acpid package
    /etc/acpi/powerbtn.sh
elif [ -x /etc/acpi/powerbtn.sh.dpkg-bak ] ; then
        # Compatibility with old config script from acpid package
    # which is still around because it was changed by the admin
        /etc/acpi/powerbtn.sh.dpkg-bak
else
    # Normal handling.
    /sbin/shutdown -h -P now "Power button pressed"
fi


注意,显式文本是作为shutdown命令的参数给出。我希望该字符串由关机程序自动记录。

调整更好的日志

无论如何,要获得明确的消息,我将文本放在下面(作为根目录)在新创建的,可与/etc/acpi/powerbtn.sh一起执行的chmod a+x /etc/acpi/powerbtn.sh

#!/bin/sh
logger in /etc/acpi/powerbtn.sh, presumably "Power button pressed"
    /sbin/shutdown -h -P now "Power button pressed"


这样做比修改/etc/acpi/powerbtn-acpi-support.sh可能会有更持久的变化。后一个选项可能在acpi-support-base软件包的下次升级中失去作用。

注意,与Ubuntu 14.04所做的不同(/etc/acpi/powerbtn.sh已经与acpid软件包存在不同的内容)。另外,Debian 8可能会有所不同。随时提供变体。

获利!

现在,当按下电源按钮时,在/var/log/messages/var/log/syslog/var/log/user.log中将出现如下一行:

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


现在,这是日志中的显式消息。

评论


感谢@Bielecki建议您考虑安装acpi-support-base和acpid软件包。我还没有测试过自己。您能否详细说明它可以带来哪些收益和版本?

–StéphaneGourichon
19年1月8日在12:40

不错的解决方案。将补丁发布到发行版将需要什么?

– Atifm
20年1月8日在17:54

#6 楼

使用last进行简化,显示系统关闭条目以及运行级别更改并在shutdownreboot上进行过滤:

last -x shutdown reboot


#7 楼

我的想法很笨拙,但也许对您有用:
输入命令last并查看所有用户的登录信息。然后,使用当时已登录的halt所需的权限过滤用户。然后查看其.bash_history文件,以查看他们是否已进入暂停状态。

#8 楼

就我而言,我有一个过热的问题,在/ var / log / syslog中通过/ var / log文件夹中的'grep shut *'找到了日志。

记录的错误是这样的:

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


#9 楼

只是在我的KVM VM上安装了芯片(我想知道主机重启是否彻底关闭了guest虚拟机),我在/var/log/auth.log中找到了我所需要的(除了last -x shutdown显示相同)。这些行出现了:

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显示了这些行,请注意,它们是按照最新的顺序(即先阅读最后一行,然后上升),但由于时钟重置(启动前23:56,启动后23:55)在前几行中也很明显,因此该顺序似乎有些令人困惑:

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)


就我而言,检查启动主机时来宾是否干净地关机,我也可以登录其中一个来宾,然后在启动主机时呆在那儿,在终端中获取这些行:

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.


#10 楼

将关机别名为脚本
脚本必须将所有参数等都赋予原始的关机可执行文件
但是:脚本必须将此脚本记录为这些

评论


关闭脚本已经执行了此操作(最后一个-x)

–forcefsck
2011年4月2日在21:33



#11 楼

cat /usr/adm/syslog


我的情况是ups软件关闭了服务器。

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