วิธีการดีบักยูนิต systemd ExecStart


13

ฉันอยากรู้ว่าฉันสามารถพิมพ์ExecStart/ExecStopบรรทัดคำสั่งที่ขยายออกได้อย่างเต็มที่หรือไม่ ลองพิจารณาตัวอย่างต่อไปนี้:

ExecStart=/usr/bin/java $OPTS_COMMON $OPTS $OPTS_LOG $OPTS_DEBUG some.class.Start --param1 ${PARAM1} --param2 ${PARAM2}

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

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

มีวิธีใดบ้างที่จะบังคับให้ systemd แสดงให้ฉันเห็นว่าพยายามเรียกใช้จริงหรือไม่?

คำตอบ:


10

น่าเสียดายที่ไม่มีวิธีการสร้าง หากต้องการดู ExecStart สุดท้ายคุณสามารถเปิดการดีบักได้ แก้ไขไฟล์/etc/systemd/system.confและการตั้งค่าไปLogLevel= debugจากนั้นคุณจะเห็นสิ่งที่ชอบ:

java.service About to execute: /usr/bin/java $OPTS_COMMON...สิ่งนี้ไม่ได้แก้ปัญหาของคุณ แต่เป็นการดีที่จะเห็นการเปลี่ยนตัวระบุของ systemd https://www.freedesktop.org/software/systemd/man/systemd.unit.html(specifiers)

แต่ถ้าคุณต้องการไปที่ด้านล่างของการแทนที่อาร์กิวเมนต์คุณต้องดูที่นี่: https://github.com/systemd/systemd/blob/7ce9cc154576e342015eab8c1500790a9ededc01/src/core/execute.c#L2570


ฉันค่อนข้างกลัวว่าจะไม่มีวิธีการทำ : / ขอบคุณ
pystole

2

ในไฟล์ * .service ในส่วน [บริการ]

ExecStartPre=/bin/bash -l -c 'echo "$OPTS_COMMON">/tmp/options.debug'

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