วิธีการอ่านข้อความปิดหลังจากนั้น?


18

ฉันใช้ Lubuntu 11.10 ทุกครั้งที่ฉันปิดตัวลงฉันสามารถอ่าน FAIL ด้วยตัวอักษรสีแดง แต่ฉันไม่สามารถอ่านเพิ่มเติมได้

ดังนั้นวิธีการอ่านข้อความบันทึกและพยายามที่จะแก้ปัญหาได้อย่างไร


ลองดูที่คำตอบนี้บน Askubuntu มันอาจช่วยให้คุณมีปัญหา
solde9

ทุกอย่างกลับคืนมาที่/var/log/syslogและ/var/log/messagesดังนั้นคุณต้องอ่านพวกเขาและ throubleshoot คุณสามารถใช้io redirectionกับerror redirectionเมื่อคุณใช้shutdown command
PersianGulf

คำตอบ:


14

ดูเหมือนจะไม่มีวิธีการบันทึกข้อมูลนี้ไปยังไฟล์ สำหรับกระบวนการบูทมีbootlogdแพ็คเกจที่สร้างไฟล์/var/log/bootแต่ไม่มีอะไรสำหรับกระบวนการปิด / รีบูต เท่าที่ฉันจะเห็นว่าไม่มีทางที่จะเข้าสู่ระบบด้วยrsyslogเช่นกันและแม้ว่าจะมี แต่ก็มีข้อความที่พิมพ์หลังจากrsyslogหยุด ส่วนหนึ่งของกระบวนการปิด / รีบูตของฉันคือการติดตั้ง rootfs ใหม่แบบอ่านอย่างเดียวและเพิ่มทุกอย่างอื่นหลังจากการบันทึกนี้ไปยังไฟล์ที่จะยังคงอยู่ในการบู๊ตครั้งถัดไปแทบจะเป็นไปไม่ได้เลย

วิธีที่ง่ายที่สุดที่ฉันสามารถดูเพื่อดูข้อความที่จะแก้ไข/etc/init.d/haltและ / หรือ/etc/init.d/rebootสคริปต์เพื่อหยุดการทำงานชั่วคราวก่อนที่จะเกิดขึ้นจริง/halt rebootสำหรับhaltสคริปต์ให้เรียกใช้คำสั่งsudoedit /etc/init.d/halt(หรือใช้โปรแกรมแก้ไข GUI) และค้นหาบรรทัดที่หยุดทำงานจริง สำหรับฉันนี่คือบรรทัด:

halt -d -f $netdown $poweroff $hddown

มิฉะนั้นควรอยู่ท้ายdo_stopฟังก์ชันและบรรทัดเดียวที่เรียกhaltคำสั่ง เมื่อคุณพบบรรทัดเพียงแค่แทรกบรรทัดใหม่ด้านบนด้วยสิ่งต่อไปนี้:

read -p "Press enter to halt" reply

บันทึกไฟล์และออก ตอนนี้เมื่อคุณปิดระบบจะหยุดจนกว่าคุณจะกด Enter (หรือ CTRL-C, CTRL-D ฯลฯ ) คุณสามารถอ่านข้อความที่พิมพ์บนหน้าจอ หากมีมากกว่าหนึ่งในหน้าจอเดียวของข้อความที่คุณสามารถดูขั้ว scrollback Shift+PgUpโดยการกด หากยังไม่เพียงพอมีวิธีเพิ่มขนาดของบัฟเฟอร์การเลื่อน (อาจเป็นคำถามที่แตกต่างกัน)

หากต้องการทำเช่นเดียวกันเมื่อระบบรีบูตคุณต้องแก้ไข/etc/init.d/rebootไฟล์ คำสั่งที่ใช้ที่นี่เป็นของหลักสูตรrebootซึ่งตรงข้ามกับhaltและควรจะอยู่ที่ท้ายdo_stopฟังก์ชั่นอีกครั้ง สำหรับฉันสายคือ:

reboot -d -f -i

อีกครั้งเพียงแค่แทรกสิ่งต่อไปนี้ในบรรทัดใหม่ด้านบน:

read -p "Press enter to reboot" reply

โปรดทราบว่าไฟล์เหล่านี้จะแสดงรายการเป็นชุดคำสั่งสำหรับinitscriptsแพคเกจ การแก้ไขเหล่านี้จะไม่ถูกปิดกั้นโดยค่าเริ่มต้นเมื่อมีการอัพเกรดแพ็คเกจแม้ว่าจะทำให้เกิดข้อขัดแย้ง


การแก้ปัญหาที่สมบูรณ์มากขึ้นคือการใช้สคริปต์ต่อไปนี้:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          pause_hook
# Required-Start:
# Required-Stop:     halt reboot
# Default-Start:
# Default-Stop:      0 6
# X-Stop-After:      umountroot
# X-Interactive:     true
# Short-Description: Pause before halt or reboot
# Description:
### END INIT INFO

do_stop () {
    [ -r /etc/pause_hook.conf ] && . /etc/pause_hook.conf

    [ "$PAUSE_HOOK_ENABLED" = true ] && read -p "Press enter to continue" reply
}

case "$1" in
    start)
        # No-op
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop)
        do_stop
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac

สิ่งนี้ควรอยู่ใน/etc/init.d/pause_hookและสามารถเปิดใช้งานให้ทำงานเมื่อปิด / รีบูตด้วยคำสั่งต่อไปนี้:

sudo update-rc.d pause_hook defaults

หากต้องการเปิดใช้งาน hook จริงให้สร้างไฟล์/etc/pause_hook.confที่มีบรรทัด:

PAUSE_HOOK_ENABLED=true

ขั้นตอนการปิด / รีบูตตอนนี้ควรหยุดก่อนhaltหรือrebootสคริปต์ที่เรียกว่าให้เวลาเพื่อดูข้อความ นอกจากนี้ยังสามารถใช้งานได้อย่างง่ายดาย / ใหม่เปิดใช้งานโดยการแสดงความคิดเห็น / uncommmenting /etc/pause_hook.confเปิดใช้งานในสาย จะไม่มีdpkgความขัดแย้งระหว่างการอัพเกรดด้วยวิธีนี้


ทางออกที่ดีโดยเฉพาะสคริปต์เริ่มต้น
Mikhail Morfikov

4

วิธีแก้ปัญหาที่ง่ายที่สุดอาจลองถ่ายวิดีโอแทนรูปถ่าย คุณสามารถก้าวผ่านทีละเฟรมได้ในภายหลัง


2
ฉันไม่อยากจะเชื่อเลยว่าไม่มีไฟล์ที่มีข้อความที่บันทึกไว้ !!! ฉันจะพยายามบันทึกด้วยวิดีโอ
Sigur

7
บางส่วนของข้อความเหล่านั้นจะถูกพิมพ์หลังจากระบบไฟล์ถูกยกเลิกการต่อเชื่อม! ดังนั้นพวกเขาจึงไม่สามารถลงเอยด้วยไฟล์ทั้งหมดได้
จิมปารีส

4

ดูบันทึกในเวลาจริง

ฉันพบว่าในระหว่างการปิดเครื่องมักจะมีโลโก้ Ubuntu และไฟกระพริบซึ่งแสดงแทนบันทึกของกระบวนการปิด หากมีข้อผิดพลาดแสดงว่าพวกเขากำลังแสดง แต่ไม่เป็นระเบียบ อย่างไรก็ตามในขณะที่ปิดเครื่องหากฉันกดปุ่ม Windows และr( Metar) ฉันจะได้เห็นความสำเร็จและความล้มเหลวของบริการระบบตามที่เกิดขึ้น ดังนั้นฉันจึงรู้ว่าสิ่งที่แตกหัก ไม่ทราบว่าแป้นพิมพ์ลัดนี้ใช้เฉพาะกับการตั้งค่า Kubuntu ของฉันหรือไม่ ฉันไม่ได้เพิ่ม .. หนึ่งในคนที่ฉันพบโดยบังเอิญ ...

ดูบันทึกหลังจากรีบูตเครื่อง

เมื่อระบบรีบูตข้อความข้อผิดพลาดควรถูกบันทึกลงในล็อกไฟล์ ไฟล์บันทึกใดขึ้นอยู่กับบริการใดที่ใช้งานไม่ได้ / กำหนดค่าไม่ถูกต้อง บันทึกที่เกี่ยวข้องเกือบจะแน่นอนอยู่ใน/var/log/(หรือไดเรกทอรีย่อยของมัน) ls, less, grepและfindได้รับโปรแกรมเดียวที่ฉันจำเป็นสำหรับการหาข้อผิดพลาดในบันทึก ...

เมื่อคุณพบข้อผิดพลาดและบริการที่ทำให้เกิดปัญหาคุณไม่จำเป็นต้องรีบู๊ตเพื่อทดสอบการกำหนดค่าใหม่ เพิ่งเริ่มบริการ .. หวังว่าคุณจะสามารถทดสอบการกำหนดค่าคงที่ด้วยคำสั่งเช่น:

sudo service <service name> restart


เป็น Windows + r หรือ Alt + r ที่คุณกดใช่หรือไม่ การแมปที่เป็นค่าเริ่มต้นจะจับคู่ปุ่ม windows กับ super และปุ่ม meta กับ alt ดังนั้นจึงไม่ชัดเจนว่าคุณจะอธิบายถึงคีย์ใด
casey

3

หลังจากดูว่าการbootlogdจัดการการบันทึกทำอย่างไรจริง ๆ แล้วปรากฎว่าสามารถโน้มน้าวให้บันทึกกระบวนการปิด / รีบูตรวมถึงการเริ่มต้นระบบได้ bootlogdเริ่มในช่วงต้นของกระบวนการบู๊ต จากนั้นจะใช้เวทย์มนตร์ttyและptsอุปกรณ์เพื่อบันทึกเอาต์พุตทั้งหมดไปยังเทอร์มินัลที่เชื่อมต่ออยู่ ttyมันจะหยุดแล้วต่อไปในขั้นตอนการบู๊ตสันนิษฐานว่าก่อนที่มันจะเริ่มต้นการเข้าสู่ระบบการส่งออกจากการทำงานที่ผู้ใช้บน

หากbootlogdเกิดปัญหาขึ้นระหว่างการปิดระบบ / การรีบูตและหยุดก่อนที่ระบบไฟล์ใดที่มีการบันทึกจะถูก unmount จะมีการบันทึกกระบวนการการปิดระบบส่วนใหญ่ที่มีให้อ่านในการบูตครั้งถัดไป

bootlogdจัดการเพื่อเป็นทั้งเริ่มและหยุดในระหว่างการเริ่มต้นโดยมีสองinitสคริปต์ หนึ่งคือinitสคริปต์ปกติซึ่งเริ่ม / หยุดกระบวนการตามปกติ อีกอันคือinitสคริปต์'กลับด้าน' เมื่อเรียกด้วยstartสคริปต์จะเรียกสคริปต์แรกพร้อมกับหยุด นี่คือ 'เทคนิค' sysvinitกระบวนการดูเหมือนว่ามันเริ่มต้นบริการที่แยกกันสองบริการเมื่อเริ่มต้นและหยุดบริการเดียวกัน สิ่งนี้จำเป็นเพื่อให้แน่ใจว่าทุกอย่างเกิดขึ้นในลำดับที่ถูกต้อง

เพื่อให้bootlogdทำงานในระหว่างการปิดระบบสิ่งที่จำเป็นต้องมี:

  1. ติดตั้งbootlogdถ้าคุณยังไม่ได้
  2. คัดลอกสคริปต์เริ่มต้นสองสคริปต์
  3. ทำให้การเปลี่ยนแปลงสคริปต์ 'กลับด้าน' หยุดเพื่อเริ่มแทนที่จะเริ่มหยุด
  4. เปลี่ยนส่วนหัวของ LSB เพื่อให้สคริปต์ทั้งสองทำงานในเวลาที่ถูกต้องระหว่างการปิด / รีบูต
  5. update-rc.dติดตั้งพวกเขาด้วย

นี่คือการเปลี่ยนแปลงของฉันเป็นbashสคริปต์คัดลอก / วาง(หากคุณต้องการทำการเปลี่ยนแปลงด้วยตนเองส่วนหัว LSB ที่ฉันใช้อยู่ในแพทช์):

cd /etc/init.d
cp bootlogd shutdown-bootlogd
cp stop-bootlogd shutdown-start-bootlogd

echo -e 'diff -ur ./shutdown-bootlogd /etc/init.d/shutdown-bootlogd
--- ./shutdown-bootlogd\t2014-02-20 13:59:23.426109512 +0000
+++ /etc/init.d/shutdown-bootlogd\t2014-02-20 11:10:56.238656828 +0000
@@ -1,14 +1,13 @@
 #! /bin/sh
-### BEGIN INIT INFO
-# Provides:          bootlogd
-# Required-Start:    mountdevsubfs
-# X-Start-Before:    hostname keymap keyboard-setup procps pcmcia hwclock hwclockfirst hdparm hibernate-cleanup lvm2
-# Required-Stop:
-# Default-Start:     S
-# Default-Stop:
-# Short-Description: Start or stop bootlogd.
-# Description:       Starts or stops the bootlogd log program
-#                    which logs boot messages.
+### BEGIN INIT INFO 
+# Provides:          shutdown-bootlogd 
+# Required-Start:
+# Required-Stop:     umountroot halt reboot 
+# Default-Start:      
+# Default-Stop:      0 6 
+# X-Stop-After:      umountfs 
+# Short-Description: Stop bootlogd at shutdown. 
+# Description: 
 ### END INIT INFO

 PATH=/sbin:/bin  # No remote fs at start
diff -ur ./shutdown-start-bootlogd /etc/init.d/shutdown-start-bootlogd
--- ./shutdown-start-bootlogd\t2014-02-20 13:59:23.430107513 +0000
+++ /etc/init.d/shutdown-start-bootlogd\t2014-02-20 11:10:56.238656828 +0000
@@ -1,24 +1,24 @@
 #! /bin/sh
 ### BEGIN INIT INFO
-# Provides:          stop-bootlogd
-# Required-Start:    $local_fs $all
-# Required-Stop:
-# Default-Start:     2 3 4 5
-# Default-Stop:
-# Short-Description: Stop bootlogd
-# Description:       See the init.d/bootlogd script
+# Provides:          shutdown-start-bootlogd
+# Required-Start:
+# Required-Stop:     $local_fs $all
+# Default-Start:
+# Default-Stop:      0 6
+# Short-Description: Start or stop bootlogd at shutdown.
+# Description:
 ### END INIT INFO

-NAME=stop-bootlogd
+NAME=shutdown-start-bootlogd
 DAEMON=/sbin/bootlogd

 [ -x "$DAEMON" ] || exit 0

 case "$1" in
-  start)
-\t/etc/init.d/bootlogd stop
+  stop)
+\t/etc/init.d/bootlogd start
 \t;;
-  stop|restart|force-reload)
+  start|restart|force-reload)
 \t# No-op
 \t;;
   status)
' | patch

update-rc.d shutdown-bootlogd defaults
update-rc.d shutdown-start-bootlogd defaults

ข้อความทั้งหมดที่ปรากฏก่อนที่จะหยุดการทำงานจะถูกเก็บไว้ในbootlogd ลบอักขระ escape ออกจากสตรีมข้อความ คำสั่ง( ) ต่อไปนี้จะแสดงสีเข้าสู่ระบบตามที่ปรากฏในระหว่างการปิดระบบ:/var/log/bootbootlogdbash

sed $'s/\^\[/\E/g;s/\[1G\[/\[27G\[/' /var/log/boot | less -r

ดูคำถามนี้สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้ - /programming/10757823/display-file-with-escaped-color-codes-boot-messages-from-bootlog-daemon/19011140

ตำแหน่งของบันทึกสามารถเปลี่ยนแปลงได้โดยแก้ไขสคริปต์เพิ่มเติม แต่น่าเสียดายที่การปรากฏตัวของไฟล์ทุกคนต้องมีการเปลี่ยนแปลง (ยังเปลี่ยน/ver/log/bootไม่เพียงพอเป็นสคริปต์ที่ไม่ได้cdไป/var/logถึงจุดหนึ่ง)

ด้านบนจะทำงานได้/var/logก็ต่อเมื่ออยู่ใน rootfs ถ้าไม่ใช่การขึ้นต่อกันนั้นจำเป็นต้องทำใหม่เพื่อให้การumountfsทำหลังจากbootlogdนั้นหยุดลง หรือมิฉะนั้นเข้าสู่ไฟล์ใน rootfs


1

คุณต้องแก้ไขไฟล์ /etc/rc6.d/* ทั้งหมดและเปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์บางไฟล์ซึ่งคุณสามารถอ่านได้ในภายหลัง

การเปลี่ยนเส้นทางนี้ยังจะบอกคุณว่าโปรแกรมและfailedwhy

นอกจากนี้คุณต้องแก้ไขstart-stop-daemonด้วยการลบ--quietพารามิเตอร์และเพิ่ม-vพารามิเตอร์ในไฟล์เหล่านั้นทั้งหมด

หากคุณทำเช่นนั้นตรวจสอบให้แน่ใจว่าคุณจะย้อนกลับการเปลี่ยนแปลงทั้งหมดที่คุณทำ การสำรองไฟล์ที่มีอยู่ก่อนทำการเปลี่ยนแปลงจะเป็นความคิดที่ดี


ตกลง. มันจะใช้เวลาทำงานมากมายจากฉัน ฉันจะพยายาม. ขอบคุณ
Sigur

แจ้งให้เราทราบผลลัพธ์
SHW

การแก้ไข sripts ใน/etc/init.d(ทุกสิ่งใน/etc/rc?.dลิงก์ไปที่นี่) จะไม่ทำอะไรเลย เอาท์พุทไม่ได้โดยตรงมันผ่านฟังก์ชั่นใน/lib/lsb/init-functionsและไฟล์อื่น ๆ ซึ่งอยู่ในแหล่งเปิด คุณสามารถแก้ไขสิ่งเหล่านี้การอัปเกรดบางอย่างจะขัดขวางการเปลี่ยนแปลง
แกรม

ฟังก์ชันหรือไบนารีที่เกี่ยวข้องเท่านั้นstart-stop-daemonมาจาก OPs PoV ตอนนี้รอการตอบกลับของเขา
SHW

@SHW ไม่ดูสคริปต์ เอาต์พุตส่วนใหญ่มาจากส่วนอื่น ๆ ของสคริปต์ ฉันไม่คิดว่าstart-stop-daemonจะสร้างผลลัพธ์ใด ๆ อย่างน้อยก็ไม่ปกติ สคริปต์สร้าง ok / log_end_msgล้มเหลวการส่งออกขึ้นอยู่กับการส่งออกกลับมาใช้ /lib/lsb/init-functions.d/20-left-info-blocksดู
แกรม

0

/var/log/messagesจะให้ข้อมูลที่คุณต้องการ หากยังไม่เพียงพอสำหรับคุณให้แก้ไข/etc/syslog.confเพื่อบันทึกข้อมูลทั้งหมด (ฉันต้องการเปิดใช้งานการบันทึกข้อผิดพลาดของเคอร์เนล, aka * kern) แต่ย้อนกลับไปด้านหลังหลังจากที่คุณรีบูตมิฉะนั้นจะกินพื้นที่จำนวนมากสำหรับบันทึก


/etc/syslog.confไม่มี sysctl.conf sysctl.d/ systemd/มีเพียง
Sigur

1
ลอง /etc/rsyslog.conf
kaboom

0

สำหรับแล็ปท็อปของฉันsudo haltจะปิดซอฟต์แวร์ไม่ใช่ฮาร์ดแวร์ เช่นหน้าจอและฮาร์ดแวร์อื่น ๆ ยังคงทำงานอยู่ ข้อความสุดท้ายในหน้าจอจะเป็น

ระบบหยุดทำงาน

ณ จุดนี้ฉันเพิ่งกดปุ่มPowerและทุกอย่างปิด คุณสามารถลองสิ่งนี้ คุณอาจลองsudo halt --verbose


ดังนั้นฉันเดาว่านี่เป็นความสำเร็จอย่างสมบูรณ์ ไม่มีความเสียหายต่อฮาร์ดแวร์!
Sigur

0

เช่นเดียวกับ Graeme กล่าวว่าด้วยระบบไฟล์ ro หรือ dismounted ฆ่า klogd ไม่มีวิธีการเขียนข้อมูลดังกล่าวไปยังไฟล์ วิธีแก้ปัญหาอาจใช้คอนโซล (พอร์ตอนุกรม) ซึ่งกำหนดไว้ใน bootargs เพียงเชื่อมต่อสายเคเบิลโมเด็ม null และพีซีอื่น (แท็บเล็ตหรือสมาร์ทโฟนที่มีตัวแปลงที่เหมาะสม) และเทอร์มินัลอีมูเลเตอร์


-1

ข้อความผิดพลาด (และอื่น ๆ ) มักจะถูกซ่อนไว้ด้วยplymouthเหตุผลด้านสุนทรียภาพ

บางทีนี่อาจช่วยได้: หากคุณกด ESC ระหว่างปิดเครื่องplymouthแสดงคอนโซลกราฟิก นั่นแสดงข้อความที่เป็นประโยชน์หรือไม่?

นอกจากนั้นยังมีสิ่งเล็ก ๆ น้อย ๆ ที่คุณสามารถทำได้หากเครื่องเกิดปัญหาจริงเพราะอาจไม่สามารถเขียนไฟล์บันทึก - ไม่ว่าจะเป็นบัฟเฟอร์หรือ/var/logถูกกำหนดให้เป็นแบบอ่านอย่างเดียวแล้วขึ้นอยู่กับว่าเกิดความผิดพลาดเกิดขึ้น คุณสามารถดูไฟล์เหล่านี้ได้ด้วยการดำเนินการls -ltr /var/logและดูว่ามีไฟล์บันทึกที่ตรงกับวันที่ปิดเครื่องของคุณ (หรือใหม่กว่า)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.