การเพิ่มการหน่วงเวลาแบบสุ่มสำหรับคำสั่ง Linux


13

ฉันกำลังใช้funcเพื่อดำเนินการคำสั่งแบบขนานบนเซิร์ฟเวอร์ของเรา

เมื่อวันก่อนเรามีปัญหาเมื่อบริการรีสตาร์ทpuppetผ่านfuncทำให้ทั้งเครือข่ายของเราชนpuppetmasterกันในเวลาเดียวกัน

คำถามของฉัน:ฉันจะรันคำสั่งที่แน่นอนแบบเดียวกันบนชุดเซิร์ฟเวอร์ในขณะที่เพิ่มความล่าช้าก่อนที่จะดำเนินการบนเซิร์ฟเวอร์แต่ละเครื่องได้อย่างไร

เช่น: random_delay && service puppet restart

ฉันสนใจในrandom_delayส่วนของคำสั่ง

คำตอบ:


25

sleep $((RANDOM % MAXWAIT)) โดยที่ MAXWAIT คือความล่าช้าสูงสุดที่ต้องการในไม่กี่วินาที


ดูเหมือนว่าจะติดอยู่ที่ "1" มากถ้าคุณสะท้อนออกมา ... ความคิด?
Corey S.

สังเกตเห็นเช่นนี้ ลองนี้สำหรับ x ใน 1 2 3 4 5; ทำ RANDOM = $ x; I = $ ((RANDOM 10%)); echo $ i; นอน $ i; เสร็จแล้วเห็นได้ชัดว่า MAXWAIT ในคำตอบของ S19N นั้นคล้ายกับ 10 ในคำตอบของฉัน เปลี่ยนเมล็ดพันธุ์แบบสุ่มและเพิ่มรหัสหุ่นเป็นสิ่งที่คุณต้องการแน่นอน
dtbnguyen

2
@CoreyS $ RANDOM กำลังทำการปิดค่าสุดท้ายดังนั้นการวนซ้ำ (ฉันได้ติดกับ 5/6/7, 2/7 และ 5) sleep $((RANDOM % MAXWAIT))เป็นวิธีที่ถูกต้อง ฉันจะแก้ไขคำตอบเช่นนี้
Jeff Ferland

สิ่งนี้เรียกว่าsplayใน Pro Puppet มันถูกใช้เพื่อป้องกันฝูงฟ้าร้องที่เครื่องจักรจำนวนมากกำลังทำสิ่งเดียวกันพร้อมกัน นอกเหนือไปจากนี้ผมประสบความสำเร็จกับการตั้งเวลา cron fqdn_randใช้
François Beausoleil

ดูเหมือนว่าจะขึ้นอยู่กับส่วนขยายเฉพาะของ bash ในผลตอบแทนdash echo sleep $((RANDOM % 900)) sleep 0ซึ่งหมายความว่าไม่ปลอดภัยที่จะใช้ใน#!/bin/shสคริปต์หรือสถานที่เช่น crontab (ดูเหมือนว่าปัญหาจะdashไม่เข้าใจ$RANDOM)
Gert van den Berg

1

ฉันค่อนข้างชอบนวัตกรรมของ S19N แต่น้อยกว่าโซลูชันที่สมบูรณ์แบบ ฉันแค่บอกว่ามันน้อยกว่าอุดมคติเพราะมันยังไม่เป็นอุปสรรคเมื่อสิ่งต่างๆจะเกิดขึ้นจริง ฉันค่อนข้างจะสามารถรับประกันได้ว่าจะเกิดอะไรขึ้นและสิ่งที่จะเกิดขึ้นเมื่อมันเกิดขึ้น

orchestration หุ่นเชิดเป็นปัญหาที่ยาก
หนึ่งในวิธีการแก้ปัญหา "แนวปฏิบัติที่ดีที่สุด" คือการใช้MCollectiveซึ่งไม่เพียง แต่ช่วยให้คุณสามารถกำหนดค่าเมื่อหุ่นเชิดทำงานในกลุ่มเครื่องของคุณ แต่คุณยังสามารถใช้มันสำหรับปัญหาอื่น ๆ


0
0 */12 * * * root perl -e 'sleep int(rand(43200))' && service puppet restart

วิธีนี้จะสุ่มจำนวนเงินระหว่าง 0 วินาทีถึง 12 ชั่วโมง (43200 = 12 x 60 x 60) ทุก 12 ชั่วโมง

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