Score:-2

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

ธง cn

ฉันอ่าน man core และ man date page และหน้าเว็บคุณภาพสี่หน้าในหัวข้อ core dumps ฉันศึกษาและฝึกทำคอร์ดัมพ์มาสี่วันแล้ว

คำถามระบุไว้อย่างดีในชื่อของโพสต์นี้

หมายเหตุ: เมื่อฉันอ้างถึง 'core' ฉันยังอ้างถึงพารามิเตอร์เคอร์เนล kernel.core_pattern และจะเรียกมันว่าตัวแปรสภาพแวดล้อม ฉันเรียกมันว่าตัวแปรสภาพแวดล้อมเพราะมันทำหน้าที่เหมือนตัวแปรสภาพแวดล้อมในขอบเขตส่วนกลาง ฉันใช้คำเหล่านี้แทนกันได้

core อธิบายใน man page วิธีตั้งค่าสภาพแวดล้อมนี้ให้แปรปรวน จับคู่เทมเพลต เทมเพลตมี 'ตัวระบุเวลา' %t ที่ให้ ไปยังเทมเพลตเวลาปัจจุบันในรูปแบบยูนิกซ์ วินาทีตั้งแต่ยุค

ตามหลักเกณฑ์หลัก สคริปต์ต่อไปนี้เป็นเทมเพลตที่เกี่ยวข้อง:
แกน.%e.%t

%e เป็นชื่อไฟล์ปฏิบัติการ
%t คือเวลาของการถ่ายโอนข้อมูล ซึ่งแสดงเป็นวินาทีตั้งแต่ยุคนั้น
core คือชื่อไฟล์ อาจเป็นแกนหลักหรือชื่อใดก็ได้ที่คุณตั้งให้

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

เราสามารถตั้งค่าตัวแปรสภาพแวดล้อมได้ดังนี้
sudo sysctl -w kernel.core_pattern=core.%e.%t

ตอนนี้ฉันต้องการวันที่ในรูปแบบสองหลัก ปีสองหลัก เดือนสองหลัก เช่น 220224ปัญหาคือตัวระบุเวลา %t ของแกนให้เวลาเป็นวินาทีตั้งแต่ยุคไม่เป็นมิตรกับมนุษย์!

ฉันยังกำหนดให้วันที่เป็นวันที่ล่าสุดเมื่อมีการเรียกใช้สคริปต์ ตัวระบุเวลา %t แกนหลักจะทำเช่นนี้ แต่, ผลลัพธ์คือชื่อไฟล์อ่านด้วยการประทับเวลายูนิกซ์ซึ่งไม่เป็นมิตรกับมนุษย์!

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

สคริปต์ที่ฉันวางแผนจะทำต่อไปนี้ ฉันเพิ่งแทนที่ตัวระบุเวลาหลักในเทมเพลตด้วยตัวอย่างที่ให้ไว้ที่นี่: วันที่ -d "-8 ชั่วโมง" +%y%m%d

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

สคริปต์ของฉันมีลักษณะดังนี้:
sudo sysctl -w kernel.core_pattern=core.%e.`date -d "-8 hours" +%y%m%d`; ~/test.out

เดอะ ~/test.out ส่วนหนึ่งของสคริปต์นั้นเรียกใช้ไฟล์ทดสอบที่ฉันใช้เพื่อเรียนรู้วิธีแก้ปัญหาการติดตั้ง linux

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

ฉันต้องการเขียนสคริปต์ใหม่เพื่อให้เขียนวันที่ได้ดีที่สุดในรูปแบบที่มนุษย์อ่านได้ รวมถึงวันที่ที่เขียนในเวลาที่คอร์ดัมพ์เกิดขึ้น ฉันเหนื่อย!

ปัญหาหนึ่งที่ฉันพบเกิดขึ้นเนื่องจากคำสั่ง date ใช้โทเค็นการควบคุมรูปแบบเดียวกัน %t เช่นเดียวกับโทเค็นตัวระบุเทมเพลตหลัก %t

นี่คือการทดสอบเพื่อยืนยันความขัดแย้งของตัวระบุเวลาหลักและการควบคุมรูปแบบของคำสั่งวันที่:

  โทเค็นนี้หมายถึงมาจากตัวระบุเวลาหลัก 
    sudo sysctl -w kernel.core_pattern=core.%e.`date -d@%t +%y%m%d`; ~/test.out

สิ่งนี้ให้ข้อความ "วันที่: วันที่ไม่ถูกต้อง â@%tâ"

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

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

                             นี่คือการประทับเวลา Unix epoch 
    sudo sysctl -w kernel.core_pattern=core.%e.`date -d@1645337785 +%y%m%d`; ~/test.out

สิ่งนี้ทำงานได้ตามที่คาดไว้ยกเว้นวันที่คงที่

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

อาจมีวิธีอื่นในการทำเช่นนี้ แต่ฉันไม่รู้. ฉันกำลังถามว่ามีท่านใดเห็นวิธีแก้ปัญหานี้หรือไม่

ขอบคุณสำหรับเวลาของคุณล่วงหน้า

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา