งาน Cron เริ่มสุ่ม แต่ภายในระยะเวลา


12

ฉันต้องการให้สคริปต์ทำงานวันละครั้งทุกวันเริ่มตั้งแต่เวลา 0900 ถึง 1200
ฉันไม่แน่ใจเกี่ยวกับไวยากรณ์ของเส้นประอย่างสมบูรณ์ - หมายความว่าสคริปต์จะทำงานทุกชั่วโมงระหว่าง9-12หรือจะเริ่มต้นแบบสุ่มระหว่าง9-12? เพราะฉันต้องการหลัง

คำตอบ:


8

ฉันไม่เคยเห็นการใช้ cron ซึ่งมีวิธีการทำงานในเวลาสุ่ม มันเป็นข้อกำหนดที่แปลก เนื่องจากเอกสารประกอบ9-12นั้นเป็นทางลัดสำหรับ9,10,11,12และหมายถึงทุก ๆ ชั่วโมงตั้งแต่ 9 ถึง 12

หากคุณต้องการรันงานในเวลาสุ่มให้รันงานเมื่อเริ่มต้นช่วงเวลาและเพิ่มการหน่วงเวลาแบบสุ่ม ตัวอย่างเช่นเมื่อต้องการทำงานที่สุ่มชั่วโมงระหว่าง 9 และ 12:

SHELL=/bin/bash
0 9 * * * sleep $((3600 * (RANDOM % 4))); do_stuff

โปรดทราบว่าRANDOMต้องใช้ bash หรือ ksh อาจไม่สามารถใช้ได้ในเชลล์เริ่มต้น

หากคุณต้องการเรียกใช้แบบสุ่มระหว่าง 9 และ 12 ด้วยความละเอียดที่สองคุณสามารถใช้RANDOM % 10800เป็นความล่าช้า แต่เนื่องจากRANDOMอยู่ในช่วง 0..32767 จะมีอคติต่อความล่าช้าระหว่าง 0 และ 32768% 10800 = 368. เพื่อหลีกเลี่ยงอคตินี้:

SHELL=/bin/bash
0 9 * * * max=$((32768/10800*10800)); while delay=$RANDOM; ((delay > max)); do :; done; sleep $((delay % 10800)); do_stuff

5
"มันเป็นข้อกำหนดที่แปลก" ฉันไม่เห็นด้วย. แอปพลิเคชันจำนวนมากโดยเฉพาะอย่างยิ่งผู้ที่จำเป็นต้องเช็คอินเซิร์ฟเวอร์เป็นระยะ (เช่นผู้จัดการแพคเกจหรือไคลเอนต์การจัดการการกำหนดค่า) จำเป็นต้องแบ่งเวลาดำเนินการเพื่อหลีกเลี่ยงสถานการณ์ฝูง อันที่จริงแล้วแอปพลิเคชั่นดังกล่าวจำนวนมากมีตัวเลือกในการสเปรย์ในตัว (เช่นการ--randomwaitทะเลาะกับยำหรือการ--splayทะเลาะกับพ่อครัว - ลูกค้า) แต่สำหรับผู้ที่ไม่มีเวลาในการดำเนินการแบบสุ่มจะเป็นคุณสมบัติที่มีประโยชน์
jayhendren

ที่เกี่ยวข้อง: stackoverflow.com/a/34815984/5419599
Wildcard

2

ฉันสิ้นสุดมีข้อกำหนดที่คล้ายกันสำหรับสคริปต์หลาม แต่จบลงด้วยการดำเนินการนี้ผ่านสคริปต์ตัวเองโดยใช้ฟังก์ชั่นแบบสุ่ม + นอนแล้วเปิดตัว cron job @ midnight

from time import sleep
import random

sleep_time = random.randint(0,7200)  #7200 seconds = 2 hours * 60 min * 60 sec
print(sleep_time)
sleep(sleep_time)

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