Günlüklerden nasıl sistemin kapanmasına neden olduğunu nasıl öğrenebilirim?


104

Örneğin bunu görüyorum /var/log/messages:

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

Kapanmaya neyin neden olduğunu bulmanın bir yolu var mı? Örneğin, konsoldan mı çalıştırıldı, biri güç düğmesine bastı mı?


2
Yani bu sefer bir ile bazı şans vardı /var/log/acpid: ortaya çıktı güç düğmesine basıldı. Başka bir fikir, acid bir ipucu vermiyorsa nereye bakmalı?
alex

Yanıtlar:


45

Yalnızca kök ayrıcalıklı programlar bir sistemi dikkatlice kapatabilir. Yani bir sistem normal bir şekilde kapandığında, ya kök ayrıcalıklarına sahip bir kullanıcı ya da bir acpi betiğidir. Her iki durumda da günlükleri kontrol ederek öğrenebilirsiniz. Bir acpi kapanması, güç düğmesine basılması, aşırı ısınması veya düşük pil (dizüstü bilgisayar) nedeniyle olabilir. Üçüncü sebebi, UPS'in güç kaynağı arızalandığında, ki bu da yine bir uyarı göndermesini unuttum.

Geçenlerde, nezaketsizce kapanmaya başlayan, aşırı ısındığı ve mobo'nun daha erken kapanması için yapılandırıldığı ortaya çıktı. Sistemin tomruklardan tasarruf etme şansı yoktu, ancak neyse ki sistemin sıcaklığını izlemek, gücü kapatmadan hemen önce artmaya başladığını gösterdi.

Bu yüzden eğer normal bir kapanma ise günlüğe kaydedilir, eğer izinsiz bir girişse ... iyi şanslar, ve eğer soğuk bir kapanma ise bilmek için en iyi şans, ortamını kontrol etmek ve izlemek.


118

Aşağıdaki komutları deneyin:

Son yeniden başlatma girişlerinin listesini görüntüle: last reboot | less

Son kapatma girişlerinin listesini görüntüle: last -x | less

veya daha doğrusu: last -x | grep shutdown | less

Ancak kimin yaptığını bilemezsin. Kimin yaptığını bilmek istiyorsanız, biraz kod eklemeniz gerekecek, yani bir dahaki sefere bileceksiniz.

Bu kaynağı çevrimiçi olarak buldum. Sizin için yararlı olabilir:

Sistemimi kimin veya neyin durdurduğunu nasıl öğrenebilirim?


25
Bu kapanmaya neyin sebep olduğunu bana söylemedi , sadece yapıldığında. Zaten biliyorum ki sorumu görün.
alex,

1
daha doğrusulast -x shutdown
Rahul Patil

5
Soruyu cevaplamadığı için aşağı oy verildi.
toogley,

1
Bağlantı özellikle "Sistemimi kimin veya neyin durduğunu nasıl öğrenebilirim ? (Old Sco Unix) "
Wolfgang

16

Kontrol edilmesi gereken birkaç şey var:

Last -x komutunun çıktısını kontrol edin

Bu komutu * çalıştırın ve çıktıyı aşağıdaki örneklerle karşılaştırın:

last -x | head | tac

Normal kapatma örnekleri

Normal bir kapatma ve çalıştırma şöyle görünür (bir kapatma olayına ve daha sonra bir sistem önyükleme olayına sahip olduğunuzu unutmayın):

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)       

Bazı durumlarda bunu görebilirsiniz (kapatma hakkında bir çizgi olmadığını ancak sistemin "durma durumu" olan çalışma seviyesi 0'da olduğunu unutmayın):

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)   

Beklenmeyen kapanma örnekleri

Elektrik kesintisinden beklenmeyen bir kapanma şöyle gözüküyor (önceden sistem kapatma olayı olmadan bir sistem önyükleme etkinliğiniz olduğunu unutmayın):

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)    

/ Var / log içindeki günlükleri inceleyin

En ilginç günlük mesajlarını filtrelemek için bir bash komutu şudur:

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'

Beklenmeyen bir kapanma veya donanım arızası meydana geldiğinde, dosya sistemleri düzgün bir şekilde kaldırılmayacaktır, bu nedenle bir sonraki önyüklemede aşağıdaki gibi günlükler alabilirsiniz:

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.

Kullanıcı güç düğmesine bastığından sistem kapandığında, şöyle bir günlük aldın:

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

Yalnızca sistem düzenli bir şekilde kapandığında böyle bir günlük alabilirsiniz:

rsyslogd: ... exiting on signal 15

Sistem aşırı ısınmadan dolayı kapandığında aşağıdaki gibi günlükler elde edersiniz:

critical temperature reached...,shutting down

Bir UPS'niz varsa ve gücü ve kapanmayı izlemek için bir arka plan programı kullanıyorsanız, günlüklerini açıkça kontrol etmelisiniz (NUT / var / log / mesajları açar ancak apcupsd / var / log / apcupsd'da oturum açar)


notlar

*: İşte lastman sayfasından açıklaması :

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. 

Biz kullanmak headson 10 etkinliği tutmak ve kullandığımız tacbiz aslında o son baskılar En son gelen en son olay ile karışık kalmamak sipariş ters çevirmek için.


İyi cevap. Debian 9'umda normal kapanma için "runlevel (to lvl 0)" satırını görmedim.
Jruv

@jruv ne gördün? Sanırım "kapatma sistemi kapatmalı"
olmalıydı

bu harika bir örnek, ancak tacemir olmadan yeniden yapılmaktan faydalanabilirdi
mbigras

inceleyerek / var / log, bu iyi bir komut ve iyi yazılmış bir bilgidir. Teşekkürler!
Howard Lee,

11

Keşfedilecek bazı günlük dosyaları: (bir Ubuntu sistemi bulundu, ancak umarım çoğu Linux / Unix sistemlerinde bulunurlardı)

/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

Yine, bu günlük dosyaları bir Ubuntu sisteminde bulunur, bu nedenle dosya adları farklı olabilir. tailKomut senin arkadaşın.


8

Kullanarak basitleştirme lastsistem kapatma girişlerini ve çalışma seviyesi değişikliklerini ve filtreleme gösteren shutdownve reboot:

last -x shutdown reboot

1
ndefontenay zaten bundan bahsetti. Katkıda bulunduğunuz için teşekkür ederiz, ancak lütfen önce mevcut yanıtları okuyun.
Gilles,

Ben cevabım bir ndefontenay basitleştirilmiş olsa da, ama teşekkürler.
jhvaras

1
Gilles, şunu söylemeliyim ki, bu çok farklı, cat foo | grep barvs grep bar foo, en sonunda, kendini filtreleyebiliyor gibi görünüyor.
xenoterracide

8

Tamamen tatmin edici değil

Benzer bir Debian 7.8'e de ihtiyacım vardı ve temelde logda net ve açık bir mesaj olmadığını gördüm; bu biraz şaşırtıcı.

Grep /var/log, makinenin kapatıldığı süreyi söylerdi, uygun nedenlerin kapandığını vb. Gösterir, ancak ilk nedeni değil.

shutdown[25861]: shutting down for system halt

Bahsedilen diğer çözümler ( last -x) çok yardımcı olmadı.

Nasıl çalıştığını görmek

Aşağıdakileri /etc/acpi/powerbtn-acpi-support.shiçeren okuma :

if [-x /etc/acpi/powerbtn.sh]; sonra
    # Acpid paketinden eski config betiği ile uyumluluk
    /etc/acpi/powerbtn.sh
elif [-x /etc/acpi/powerbtn.sh.dpkg-bak]; sonra
        # Acpid paketinden eski config betiği ile uyumluluk
    # hala ortalıkta çünkü yönetici tarafından değiştirildi
        /etc/acpi/powerbtn.sh.dpkg-bak
Başka
    # Normal kullanım.
    / sbin / shutdown -h -P şimdi "Güç düğmesine basıldı"
fi

Açık bir metnin shutdownkomutun parametresi olarak verildiğine dikkat edin . Bu dizginin kapatma programı tarafından otomatik olarak kaydedilmesini beklerdim.

Daha iyi günlükler için ayarlama

Neyse, açık bir mesaj almak için yeni oluşturulan bir /etc/acpi/powerbtn.shçalıştırılabilir dosyaya aşağıdaki metni (root olarak) koydum.chmod a+x /etc/acpi/powerbtn.sh

#! / Bin / sh
/etc/acpi/powerbtn.sh dosyasındaki logger, muhtemelen "Güç düğmesine basıldı"
    / sbin / shutdown -h -P şimdi "Güç düğmesine basıldı"

Bu şekilde yapmak muhtemelen modifiye etmekten daha uzun süreli bir değişiklik yapacaktır /etc/acpi/powerbtn-acpi-support.sh. İkinci seçenek muhtemelen bir sonraki paket yükseltme işleminde etkisini kaybedecektir acpi-support-base.

Ubuntu 14.04'ten farklı olarak farklı yapar ( /etc/acpi/powerbtn.shzaten acpidpaketten farklı içeriğe sahip ). Ayrıca, Debian 8 muhtemelen farklı yapar. Çeşitleri sunmaktan çekinmeyin.

Kar!

Güç düğmesine basıldığında Ve şimdi, aşağıdaki gibi bir çizgi görünür /var/log/messages, /var/log/syslogve /var/log/user.log:

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

Şimdi bu kayıt defterinde açık bir mesaj.


Yüklemeyi acpi-support-baseve acpidpaketleri düşünmeyi önerdiğiniz için @Bielecki'ye teşekkürler . Kendimi test etmedim. Hangi dağıtım ve sürüm için fayda sağladığını detaylandırabilir misiniz?
Stéphane Gourichon

4

Sakar bir fikrim var, ama belki de sizin için işe yarar: komuta girin lastve tüm kullanıcıların oturum açma bilgilerini kontrol edin. daha sonra, halto anda oturum açmış olan kullanıcılara izin vermeleri için gerekli filtreleri kullanın . sonra .bash_historydurup durmadıklarını görmek için dosyalarına bakın.


1

Benim durumumda aşırı ısınma sorunu vardı ve / var / log / syslog logunu / var / log klasöründeki 'grep shut *' ile buldum.

Kaydedilen hata şuydu:

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

1

Sadece KVM VM'mi çipleyin (burada bir ev sahibinin yeniden başlatılmasının misafirlerin temiz bir şekilde kapatılıp kapatılmadığını merak ettim), ihtiyacım olanı buldum /var/log/auth.log( last -x shutdownaynı şeyi göstermenin yanı sıra ). İşte bu çizgiler geldi:

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 -xbu satırları gösterir, en son ilk sıraya göre yazdırıldıklarına dikkat edin (ör. önce son satırı okuyun ve sonra yukarı gidin), ancak saatin sıfırlanmasından (önyüklemeden önce 23:56, 23:55 sonra) önceki satırlarda da belirgin olarak, sipariş biraz şaşırtıcı görünüyor:

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)

Benim açımdan, konukların bilgisayar önyüklendiğinde kapanıp kapanmadığını kontrol etmek için, konuklardan birine giriş yapabilirim (ssh) ve ana bilgisayarı başlattığımda orada kalarak terminalde şu satırları alabilirim:

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

betiğe kapatma komut dosyası
, betiğin tüm parametreleri çalıştırması
gerekir , vs. orijinal kapanma çalıştırılabilir koduna BUT: komut dosyası bunları kaydetmelidir.


2
Kapatma komut dosyası zaten bunu yapar ( last -x)
forcefsck

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.