Score:0

`kernel.core_pattern` ไม่มีผลกับ Ubuntu 18.04 VM หลังจากรีบูตเครื่อง

ธง ao

สภาพแวดล้อมการทดสอบ

ฉันกำลังใช้ อูบุนตู/ไบโอนิค 64 กล่องพเนจร เป็นสภาพแวดล้อมการทดสอบของฉัน

เงื่อนไขล่วงหน้า

หลังจากสร้าง VM ฉันติดตั้งเท่านั้น ใช้งานได้ 2.9.23 โดยทำตาม คำแนะนำในเอกสารราชการ.

ฉันยังติดตั้ง ansible.posix ของสะสม (คอลเลกชัน ansible-galaxy ติดตั้ง ansible.posix) เพราะฉันต้องการใช้โมดูล ansible.posix.sysctl.

ตรวจสอบว่ารูปแบบหลักปัจจุบันไม่ใช่สิ่งที่ฉันต้องการ:

vagrant@ubuntu-bionic:~$ sysctl kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E

อีกด้วย, /etc/sysctl.conf ไม่มีรูปแบบหลัก:

คนจรจัด@ubuntu-bionic:~$ grep "core_pattern" /etc/sysctl.conf
คนจรจัด@ubuntu-bionic:~$

ความตั้งใจของฉัน

ฉันต้องการเปลี่ยนรูปแบบหลักเป็น /var/tmp/core.%h.%e.%t.

ฉันทำอะไรลงไป

ฉันวิ่งต่อไปนี้ เข้าใจได้ สั่งการ:

ansible -bKvvv -m "sysctl" -a "ชื่อ=kernel.core_pattern state=ค่าปัจจุบัน='/var/tmp/core.%h.%e.%t' reload=yes" localhost

และประสบความสำเร็จด้วยผลลัพธ์:

โลคัลโฮสต์ | เปลี่ยน => {
    "เปลี่ยน": จริง 
    "การร้องขอ": {
        "module_args": {
            "ละเว้นข้อผิดพลาด": เท็จ 
            "ชื่อ": "kernel.core_pattern", 
            "โหลดซ้ำ": จริง 
            "สถานะ": "ปัจจุบัน", 
            "sysctl_file": "/etc/sysctl.conf", 
            "sysctl_set": เท็จ 
            "ค่า": "/var/tmp/core.%h.%e.%t"
        }
    }
}

ฉันตรวจสอบการกำหนดค่าปัจจุบันด้วย:

vagrant@ubuntu-bionic:/etc$ sysctl kernel.core_pattern
kernel.core_pattern = /var/tmp/core.%h.%e.%t

ผมยังยืนยันว่า core_pattern ถูกเขียนลงใน /etc/sysctl.conf:

คนจรจัด@ubuntu-bionic:~$ grep "core_pattern" /etc/sysctl.conf 
kernel.core_pattern=/var/tmp/core.%h.%e.%t

จากนั้นฉันรีบูท VM ของฉัน หลังจากรีบูตเครื่อง ปัจจุบันมีผล core_pattern ถูกย้อนกลับ:

vagrant@ubuntu-bionic:~$ sysctl kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E

ความคิดของฉันและสิ่งที่ฉันได้ลอง

คำถามนี้ ดูเหมือนจะใช้ไม่ได้สำหรับฉัน เพราะประการแรก มันถูกถามเมื่อประมาณ 10 ปีที่แล้ว และประการที่สอง เซิร์ฟเวอร์ Ubuntu 18.04 ดูเหมือนจะใช้ไม่ได้ พุ่งพรวด อีกต่อไป.

ฉันคิดอย่างอื่น .conf ไฟล์อาจถูกอ่านช้ากว่า /etc/sysctl.conf ดังนั้นการตั้งค่าจึงถูกแทนที่ในที่ใดที่หนึ่ง แต่ sysctl(8) หน้าคน แสดงรายการลำดับของ .conf ไฟล์ที่จะอ่านและดูเหมือนว่า /etc/sysctl.conf ควรเป็นตัวสุดท้ายที่แทนที่สิ่งอื่นทั้งหมด

sysctl.conf(5) หน้าคน ให้รายการคำสั่งเดียวกับ sysctl(8).

ฉันไม่พบอะไรใน sysctl.d(5), ทั้ง. ในความเป็นจริง ส่วน "การกำหนดค่าไดเรกทอรีและความสำคัญ" ยืนยันความเข้าใจของฉัน:

ไฟล์ใน /etc/ จะแทนที่ไฟล์ที่มีชื่อเดียวกันใน /run/ และ /lib/ ไฟล์ใน /run/ แทนที่ไฟล์ที่มีชื่อเดียวกันใน /lib/

ฉันพบ kernel.core_pattern จะถูกตั้งค่าตามที่คาดไว้เมื่อฉันวิ่ง sudo sysctl -- ระบบ ด้วยตนเอง นั่นอาจหมายความว่าการตั้งค่าระบบเหล่านี้จะไม่ถูกอ่านตามค่าเริ่มต้น

Score:0
ธง ao

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

ฉันควรจะคิดที่จะตรวจสอบ แอพ เมื่อฉันเห็นสตริง "/usr/share/apport/apport" ฉันไม่แน่ใจว่า แอพ เป็นตัวที่เขียนทับจริงๆ kernel.core_patternฉันจึงตัดสินใจดูซอร์สโค้ดของมัน

ด้วยการวิ่ง apport นโยบาย apt-cacheฉันพบว่าเวอร์ชันที่ฉันใช้อยู่คือ 2.20.9-0ubuntu7.24:

vagrant@ubuntu-bionic:~$ นโยบาย apt-cache apport
แอพ:
  ติดตั้งแล้ว: 2.20.9-0ubuntu7.24
  ผู้สมัคร: 2.20.9-0ubuntu7.24
  ตารางเวอร์ชัน:
 *** 2.20.9-0ubuntu7.24 500
        500 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 แพ็คเกจ
        500 http://security.ubuntu.com/ubuntu bionic-security/main amd64 แพ็คเกจ
        100 /var/lib/dpkg/สถานะ
     2.20.9-0ubuntu7 500
        500 http://archive.ubuntu.com/ubuntu bionic/main amd64 แพ็คเกจ
คนจรจัด@ubuntu-bionic:~$

จากนั้น แอพ's หน้า LaunchPadฉันพบลิงค์ดาวน์โหลด: apport_2.20.9-0ubuntu7.tar.gz.

ค้นหาในซอร์สโค้ด ฉันพบไฟล์ เดเบียน/apport.init มีเนื้อหาดังนี้

do_start()
{
    ...
    ...
    echo "|$AGENT %p %s %c %d %P" > /proc/sys/kernel/core_pattern
    เสียงสะท้อน 2 > /proc/sys/fs/suid_dumpable
}

ดังนั้นฉันจึงวิ่ง dpkg -L apport บน VM ของฉันเพื่อดูว่ามีไฟล์นี้หรือไม่:

คนจรจัด@ubuntu-bionic:~$ dpkg -L apport | grep เริ่มต้น
/etc/init.d
/etc/init.d/apport

ไม่มีไฟล์ใดที่มีชื่อไฟล์ตรงกันทุกประการ แต่ฉันตัดสินใจลองดู /etc/init.d/apport และพบว่านี่คือไฟล์ที่ฉันกำลังมองหา:

do_start()
{
        ...
        ...
        echo "|$AGENT %p %s %c %d %P %E" > /proc/sys/kernel/core_pattern
        เสียงสะท้อน 2 > /proc/sys/fs/suid_dumpable
}

ฉันรู้ว่า /etc/sysctl.conf ถูกอ่านโดยบริการ systemd-sysctlดังนั้นสิ่งต่อไปที่ฉันต้องการจะพิจารณาว่า systemd-sysctl ได้เริ่มต้นขึ้นก่อน แอพ.

ฉันค้นหาว่ามีหรือไม่ แอพ- บริการที่เกี่ยวข้องและพบว่า:

vagrant@ubuntu-bionic:~$ systemctl รายการหน่วย | เกรป แอพพอร์ต
apport.service โหลด LSB ที่ใช้งานอยู่ ออกแล้ว: การสร้างรายงานข้อขัดข้องอัตโนมัติ

จากนั้นฉันตรวจสอบการพึ่งพาระหว่างกันและพบว่า apport.service จะเริ่มขึ้นหลังจาก systemd-sysctl.service:

คนจรจัด@ubuntu-bionic:~$ systemctl รายการพึ่งพา apport.service
apport.service
â ââsystem.slice
â ââsysinit.target
...
â ââsystemd-sysctl.service
...
...
คนจรจัด@ubuntu-bionic:~$

นั่นหมายความว่า systemd-sysctl.service อ่านการตั้งค่าของฉันอย่างถูกต้อง kernel.core_pattern ใน /etc/sysctl.conf แต่การตั้งค่าจะถูกเขียนทับโดยทันที apport.service.

เพื่อยืนยันสิ่งนี้ ฉันได้เพิ่มสองบรรทัดเข้าไป /etc/init.d/apport:

do_start()
{
        ...
        ...
        # หมายเหตุ (ywen): เขียนค่าปัจจุบันลงในไฟล์
        sysctl kernel.core_pattern > /home/vagrant/sysctl.kernel.core_pattern.txt

        echo "|$AGENT %p %s %c %d %P %E" > /proc/sys/kernel/core_pattern
        เสียงสะท้อน 2 > /proc/sys/fs/suid_dumpable

        # หมายเหตุ (ywen): ผนวกค่าปัจจุบันเข้ากับไฟล์
        sysctl kernel.core_pattern >> /home/vagrant/sysctl.kernel.core_pattern.txt
}

จากนั้นฉันรีบูท VM เมื่อ VM กลับมาทำงานอีกครั้ง ฉันพบไฟล์ /home/vagrant/sysctl.kernel.core_pattern.txt มีเนื้อหาดังนี้

คนจรจัด@ubuntu-bionic:~$ cat sysctl.kernel.core_pattern.txt 
kernel.core_pattern = /var/tmp/core.%h.%e.%t
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E
คนจรจัด@ubuntu-bionic:~$

แน่นอน การตั้งค่าของฉันถูกอ่านอย่างถูกต้อง แต่ถูกเขียนทับโดย แอพ.

โพสต์คำตอบ

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