จะฆ่า send-daemon อย่างสง่างามได้อย่างไรใน container docker


1

ฉันกำลังพยายามเชื่อมต่อ daemon การส่งข้อมูลแบบสแตนด์อโลนกับ https ดังนั้นฉันจึงใช้transmission-daemonและnginxแพ็คเกจและตัวเทียบท่านั้นใช้ Linux อัลไพน์

ในการรันทั้งสองโปรแกรมฉันใช้งานsupervisorอยู่

ทุกอย่างทำงานได้ดี แต่ฉันต้องการให้มันdocker container stopฆ่าภาชนะของฉันอย่างงดงาม ดังนั้นฉันได้กำหนดค่าsupervisorให้เผยแพร่สัญญาณ TERM ไปtransmission-daemonแล้ว

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

ฉันไม่รู้เลยว่าทำไม มีใครช่วยฉันได้ไหม

นี่คือการกำหนดค่าการส่งหัวหน้างานของฉัน:

[program:transmission]
user=transmission
command=/usr/bin/transmission-daemon -f
stopsignal=TERM
stopwaitsecs=60
stopasgroup=true
killasgroup=true

ฉันเปิดรับข้อเสนอแนะใด ๆ

คำตอบ:


1

จากwiki ของ Arch Archดูเหมือนว่าคำสั่งถึงจุดสิ้นสุดtransmission-daemonคือ:

killall transmission-daemon

หรือ

$ transmission-remote --exit

หรือจากความช่วยเหลือของ Ubuntu:

transmission-remote -n 'transmission:transmission' -q

ฉันคิดว่าสัญญาณ SIGTERM และ TERM เหมือนกันและkillallค่าเริ่มต้นของการส่ง SIGTERM ดูเหมือนว่าหัวหน้างานของคุณควรจะทำงาน ... หลังจากหยุดรอมันควรจะส่งสัญญาณ KILL ด้วยดังนั้นถ้ามันไม่ได้ส่งสิทธิ์ สัญญาณในเวลาที่ถูกต้อง ... ยืนยันในเทอร์มินัลว่า TERM / SIGTERM จะฆ่าการส่งสัญญาณ หากไม่เป็นเช่นนั้นอาจเป็นข้อผิดพลาด

ลองเพิ่ม a redirect_stderrหรือstdout_logfileline เพื่อดูว่ามันจะบอกอะไรกับ supervisord ไหม


ขอบคุณสำหรับคำตอบของคุณ transmission-remote --exitดูเหมือนว่าจะทำงาน ฉันทำแบบทดสอบมากมายและปัญหาก็เหมือนกันถ้าฉันส่งสัญญาณไปยังการส่งด้วยตนเองเมื่อทำการดาวน์โหลด ดูเหมือนจะไม่สนใจมัน แต่ฉันทำแบบทดสอบเดียวกันโดยใช้ภาพ Archlinux และมันทำงานได้อย่างสมบูรณ์แบบ ... การส่งข้อมูลทั้งสองแบบนั้นเหมือนกัน (2.92) ดังนั้นฉันคิดว่าสาเหตุมีความซับซ้อนมากกว่านี้: บางทีความแตกต่างในการจัดการสัญญาณระหว่างอัลไพน์และอาร์คลินซ์? มันเกินความสามารถของฉัน ...
lama02

1
ฉันไม่คุ้นเคยกับอัลไพน์ แต่มันต้องเป็นความแตกต่างสัญญาณธรรมดาน่าจะใช้ได้ แต่ถ้า transmission-remote --exitใช้งานได้เท่านั้นลองลองตรวจสอบว่ามันเป็นซอร์สโค้ดเพื่อดูว่า--exitมันทำอะไรกันแน่มันไม่ใช่สคริปต์ดังนั้นมันจึงไม่ง่ายอย่างless $(which ...)น่าเสียดาย แต่แล้วมันก็ไม่ได้ช่วยหัวหน้างานอยู่ดี ฉันเอนตัวไปทางบั๊กในการส่งสัญญาณของอัลไพน์
Xen2050

transmission-remote --exitการโทรtr_sessionCloseและการส่งสัญญาณอย่างปิดสนิท ฉันไม่เข้าใจว่าสัญญาณ TERM หรือ INT เรียกฟังก์ชั่นนี้ด้วยเช่นกัน แต่ฉันคิดว่าเป็นเพราะเมื่อทำงานกับการทดสอบของฉันฉันจะเห็นบันทึกเดียวกันกับการtr_sessionCloseโทร ดังนั้นคุณคิดว่ามันอาจเป็นข้อผิดพลาดในการส่งสัญญาณอัลไพน์? แต่มีรุ่นเดียวกันทั้ง Archlinux และ Alpine ดังนั้นเป็นไปได้อย่างไร
lama02

1
ฉันไม่เคยได้ยินเกี่ยวกับ Alpine linux มาก่อนวันนี้ แต่เห็นได้ชัดว่ามันอิงกับ busybox & musl (C library) ไม่ใช่การใช้ glibc (Debian's repo เรียก glibc6 "ไลบรารีมาตรฐานที่ใช้โดยโปรแกรมเกือบทั้งหมดในระบบ") ดังนั้น อาจเป็นอะไรก็ได้ คุณสามารถลองเปรียบเทียบซอร์สโค้ดจากแพ็คเกจของ arch & Alpine ได้หรือไม่ หรือลองใช้วิธีการของ wiki wiki.alpinelinux.org/wiki/…การควบคุมด้วย HTTP ("transmission-daemon จะถูกควบคุมผ่านทางคลัตช์ซึ่งดำเนินการโดย lighttpd")
Xen2050

1
ดูเหมือนว่าข้อผิดพลาด & ทำตัวเหมือนเป็นข้อผิดพลาดโดยเฉพาะการทดสอบกับรุ่นเดียวกันในระบบอื่นฉันคิดว่ามันเป็นข้อผิดพลาด :) นั่นเป็นข้อได้เปรียบของ distros ที่ใหญ่กว่าเช่น Debian (& มาโดยตรง) ผู้ทดสอบและตามากขึ้น ขอบคุณสำหรับการตรวจสอบฉันขึ้นลูกศรรายงานข้อผิดพลาดของคุณเช่นกันเพราะมันเป็นคำตอบที่มีประโยชน์อย่างแน่นอน โชคดี!
Xen2050

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