เอาต์พุตคอนโซล Jenkins เรียลไทม์สำหรับคำสั่งเธรดผ้าแบบขนาน [ปิด]


22

เรามีคำสั่ง Python fabric ที่ทำงานพร้อมกันในหลาย ๆ โฮสต์เช่นนี้:

$ fab --hosts=prod1.server,prod2.server,prod3.server --parallel copy_cache

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

[prod1.server] Executing task 'nginx_cache_copy'
[prod2.server] Executing task 'nginx_cache_copy'
[prod3.server] Executing task 'nginx_cache_copy'
2014-09-16 10:02:29.688243
[prod1.server] INFO: rsyncing cache dir
[prod1.server] run: rsync -a -q cache.server:"repo/cache/some.site.com" \
                                             "repo/cache/."
2014-09-16 10:02:29.716345
[prod2.server] INFO: rsyncing cache dir
[prod2.server] run: rsync -a -q cache.server:"repo/cache/some.site.com" \
                                             "repo/cache/."
2014-09-16 10:02:29.853275
[prod3.server] INFO: rsyncing cache dir
[prod3.server] run: rsync -a -q cache.server:"repo/cache/some.site.com" \
                                             "repo/cache/."
2014-09-16 10:02:29.984154
[prod1.server] INFO: Reloading nginx config
[prod1.server] run: sbin/nginx -s reload -c "repo/nginx.conf"
2014-09-16 10:02:30.025155
[prod2.server] INFO: Reloading nginx config
[prod2.server] run: sbin/nginx -s reload -c "repo/nginx.conf"
2014-09-16 10:02:30.100169
[prod1.server] SUCCESS: CACHE COPY COMPLETE

2014-09-16 10:02:30.181938
[prod2.server] SUCCESS: CACHE COPY COMPLETE

2014-09-16 10:02:30.331402
[prod3.server] INFO: Reloading nginx config
[prod3.server] run: sbin/nginx -s reload -c "repo/nginx.conf"
2014-09-16 10:02:30.559271
[prod3.server] SUCCESS: CACHE COPY COMPLETE

Done.

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

[prod1.server] Executing task 'nginx_cache_copy'
2014-09-16 10:02:29.688243
[prod1.server] INFO: rsyncing cache dir
[prod1.server] run: rsync -a -q cache.server:"repo/cache/some.site.com" \
                                             "repo/cache/."
2014-09-16 10:02:29.984154
[prod1.server] INFO: Reloading nginx config
[prod1.server] run: sbin/nginx -s reload -c "repo/nginx.conf"
2014-09-16 10:02:30.100169
[prod1.server] SUCCESS: CACHE COPY COMPLETE

[prod2.server] Executing task 'nginx_cache_copy'
2014-09-16 10:02:29.716345
[prod2.server] INFO: rsyncing cache dir
[prod2.server] run: rsync -a -q cache.server:"repo/cache/some.site.com" \
                                             "repo/cache/."
2014-09-16 10:02:30.025155
[prod2.server] INFO: Reloading nginx config
[prod2.server] run: sbin/nginx -s reload -c "repo/nginx.conf"
2014-09-16 10:02:30.181938
[prod2.server] SUCCESS: CACHE COPY COMPLETE

[prod3.server] Executing task 'nginx_cache_copy'
2014-09-16 10:02:29.853275
[prod3.server] INFO: rsyncing cache dir
[prod3.server] run: rsync -a -q cache.server:"repo/cache/some.site.com" \
                                             "repo/cache/."
2014-09-16 10:02:30.331402
[prod3.server] INFO: Reloading nginx config
[prod3.server] run: sbin/nginx -s reload -c "repo/nginx.conf"
2014-09-16 10:02:30.559271
[prod3.server] SUCCESS: CACHE COPY COMPLETE

Done.

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

ฉันไม่สามารถค้นหาการตั้งค่าในเจนกินส์ที่จะปิดใช้งานการจัดกลุ่มเธรดนี้ ไม่มีใครมีความคิดใด ๆ


4
ไม่เคยพบโซลูชันที่สมบูรณ์แบบสำหรับเรื่องนี้ แต่การเรียกใช้PYTHONUNBUFFERED=1 && fab ...จะช่วยได้เล็กน้อยโดยแสดงเซิร์ฟเวอร์แต่ละเครื่องให้เสร็จสมบูรณ์แทนที่จะรอให้ทุกคนดำเนินการให้เสร็จสิ้น ยังคงต้องการที่จะหาทางออกเรียลไทม์อย่างสมบูรณ์แม้ว่า
mVChr

3
ฉันลงคะแนนเพื่อปิดคำถามนี้เป็นแบบปิดเนื่องจากดูเหมือนว่าเหมาะสำหรับ Server Fault มากกว่า
23724 Tamara Wijsman

1
คุณได้ลองนำหน้าคำสั่ง unix ด้วย "stdbuf -oL" แล้วหรือยัง?
strobelight

Mr. VarCharbroiled Charcoal Black - คุณพอใจเพียงใดกับ Superuser.com ที่ให้คำตอบสำหรับคำถามนี้ คุณต้องการความสนใจเพิ่มเติมหรือยัง อาจมีตัวเลือกเพิ่มเติมที่เราสามารถสำรวจให้คุณได้ คุณอาจพิจารณาเปลี่ยนชื่อเรื่องเป็นสิ่งที่น่าดึงดูดยิ่งกว่าเพื่อดึงดูดความสนใจตัวอย่างเช่นกลยุทธ์การคิดแบบรวดเร็วที่คุณสามารถนำไปใช้ได้ สิ่งที่เป็นอันตรายในการพยายาม
Pimp Juice IT

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