ฉันจะดีบักสคริปต์ Upstart ได้อย่างไร


67

ด้วยเหตุผลบางอย่างฉันได้รับข้อผิดพลาดระหว่างการอัปเกรด apportสาเหตุของปัญหาคือ

% sudo service apport start
start: Job failed to start

ภายใต้ sysvinit ฉันสามารถแก้ไขปัญหาประเภทนี้ได้ด้วยการเรียกใช้เช่น

sudo sh -x /etc/init.d/whatever start

แต่ดูเหมือนจะไม่ทำแผนที่ไปถึงพุ่งพรวด ฉันควรลองสิ่งต่อไปอย่างไร

ปรากฎว่ามีวิธีแก้ไขปัญหาที่จะช่วยให้การติดตั้งดำเนินต่อไป แต่ฉันยังสนใจคำถามทั่วไปว่าจะติดตามสคริปต์ได้อย่างไร


1
ฉันกำลังทำงานกับการตอบกลับอย่างละเอียดมากขึ้น แต่ขอบคุณสำหรับลิงก์ไปยังวิธีแก้ไขปัญหาสิ่งเดียวกันเกิดขึ้นกับฉันในการอัปเดต natty วันนี้!
Mark Russell

ฮ่าฮ่าและพวกเขาปล่อยการแก้ไขเมื่อ 12 นาทีที่แล้ว ใช้งาน Beta ไม่สนุกหรือไม่ (ไม่จริง!)
Mark Russell

+ มูฮัมหมัดโพสต์คำตอบที่ถูกต้องด้านล่าง
Travis Reeder

/var/log/syslogผมพบว่าข้อมูลการแก้จุดบกพร่องประโยชน์ในการ
แมตต์

คำตอบ:


29

ข้อมูลทั้งหมดดังต่อไปนี้ (และค่อนข้างมากมีประโยชน์มากขึ้นพุ่งพรวดช่วยเหลือ) จากพุ่งพรวดตำรา ส่วนที่ 18 ครอบคลุมการดีบัก http://upstart.ubuntu.com/cookbook/#debugging

ในกรณีนี้โดยเฉพาะการติดตาม "สคริปต์" stanza ของงานพุ่งพรวดคุณควรเพิ่มบรรทัดต่อไปนี้ด้านล่างคำว่า "script":

exec 2>>/dev/.initramfs/myjob.log
set -x

เหตุผลสำหรับตำแหน่งแปลกคือ /dev/.initramfs/ พร้อมใช้งานในการบู๊ตเร็วมากก่อนที่จะโหลดระบบไฟล์รูทและยังคงพร้อมใช้งานหลังจากบูต ฉันคาดเดากับ apport อย่างไรก็ตามคุณอาจไม่จำเป็นต้องใช้เส้นทางนั้น ถึงกระนั้นก็ยังดีที่รู้ว่าตัวเลือก

ควรสังเกตว่าสคริปต์ทั้งหมดทำงานด้วยset -eคำสั่งใด ๆ ที่ล้มเหลวจะออกจากสคริปต์ทั้งหมด ซึ่งสมเหตุสมผลแล้วอย่างหนึ่งควรใช้ความระมัดระวังเป็นอย่างยิ่งเมื่อเรียกใช้สคริปต์ในฐานะรูท

ฉันขอแนะนำให้ปรึกษา Upstart Cookbook ที่ลิงก์ด้านบนโดยทั่วไปสำหรับทุกคนที่ทำงานกับงาน Upstart


ขอบคุณสำหรับสิ่งนั้นหากฉันไม่เห็นข้อบกพร่องได้รับการแก้ไขฉันอาจต้องแก้ไขสคริปต์เพื่อเปิดset -xตามที่คุณแนะนำ ฉันส่วนใหญ่สงสัยว่ามีวิธีที่สะอาดกว่าที่จะทำ
poolie

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

และวิธีการนี้จะล้มเหลวหากsetuidและsetgidถูกใช้ในงาน
0xC0000022L

/dev/.initramfs ไม่ได้มีอยู่เสมอ ฉันเพิ่งเจอเครื่องจักรที่ไม่มีเส้นทางนี้
Sarge Borsch

110

/var/log/upstart/your-service-name.logพุ่งพรวดบันทึกการดำเนินการบริการของคุณในแฟ้มบันทึกโดยใช้ชื่อเดียวกันใน มันควรจะเป็นประโยชน์


2
ดูเหมือนว่านี่รวมถึง stderr ของงานดังนั้นถ้าฉันเปิดset -xมันอาจจะปรากฏขึ้นที่นั่น
poolie

1
ฉันใส่คำสั่งบันทึกตาม echo ใน /etc/init.d/Xservice script ของฉัน แต่มันไม่แสดงในตำแหน่งนี้! ระบบปฏิบัติการ: Ubuntu 14.04 Trusty
Champ

ทำไมไม่ syslog? ฉันขอแนะนำคุณสมบัติทั่วไป, บางที rsyslog เอง, ว่าพุ่งพรวดและส่วนประกอบใด ๆ จะใช้เพื่อเขียนถึง syslog ถ้ามันไม่พร้อมใช้งาน, หรือไปยังสถานที่ชั่วคราวที่จะถ่ายโอนไปยัง syslog โดยเร็ว. ฉันใช้เวลาครึ่งวันกว่าจะพบสิ่งนี้ กรุณาส่งต่อคำพูดนี้ TIA
Papou

4
สิ่งนี้ดูเหมือนจะไม่เป็นจริงใน 16.04 อีกต่อไปตั้งแต่ 15.10 เป็นอย่างน้อย: ไฟล์สุดท้ายในไดเรกทอรีนั้นมีการลงวันที่ตั้งแต่ก่อนที่จะมีการเปิดตัว 15.10
FGM

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