CronJob ทุก ๆ 25 นาที


13

ฉันต้องการทราบว่ามีวิธีที่ง่ายกว่าในการทำงานทุก ๆ 25 นาทีหรือไม่ ใน cronjob ถ้าคุณระบุพารามิเตอร์นาทีเป็น * / 25 มันจะทำงานเฉพาะในนาทีที่ 25 และ 50 ของทุกชั่วโมง

คำตอบ:


15

คำสั่งใน crontab จะถูกดำเนินการด้วย/bin/shดังนั้นคุณสามารถใช้การขยายตัวทางคณิตศาสตร์เพื่อคำนวณว่าโมดูโลนาทีปัจจุบัน 25 เท่ากับศูนย์หรือไม่:

*/5 * * * * [ $(( $(date +\%s) / 60 \% 25 )) -eq 0 ] && your_command

cronจะทำงานนี้รายการทั้งหมดทุก 5 นาที แต่ถ้านาทีปัจจุบัน (นาทีนับตั้งแต่ยุค) โมดูโล 25 your_commandเท่ากับศูนย์มันจะทำงาน

ดังที่คนอื่น ๆ ชี้ให้เห็นว่า 1 วันนั้นไม่สามารถหารได้อย่างสม่ำเสมอภายใน 25 นาทีดังนั้นสิ่งนี้จะไม่ทำให้เกิดyour_commandการเรียกใช้ในเวลาเดียวกันทุกวัน แต่จะทำงานทุก 25 นาที


ใจดีเพียงแค่ ...
โทมัส

โปรดทราบว่าด้วยการใช้ cron จาก ISC อย่างน้อยคุณจะต้องหลีกเลี่ยงอักขระ% เหล่านั้นด้วยแบ็กสแลช
Stéphane Chazelas

@ StéphaneChazelasจุดที่ดี ฉันไปข้างหน้าและเพิ่มแบ็กสแลชก่อนเครื่องหมายเปอร์เซ็นต์เนื่องจากความรู้ของฉันการใช้ cron ทุกครั้งต้องใช้สิ่งนี้
CODE-READ

7

ทางออกที่ดีที่สุดของคุณคือการทำงานที่ 20 นาทีหรือ 30 นาที

ถัดไปที่ดีที่สุดคุณอาจจะทริกเกอร์ทุก 5 นาทีจากนั้นให้นับภายในหรือเวลาและเรียกใช้ทุกทริกเกอร์ที่ 5 หรือ 25 นาทีผ่านไปนับตั้งแต่การวิ่งครั้งสุดท้าย

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

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

ในที่สุดคุณสามารถใช้ daemon ของคุณเองได้ตลอดเวลาและกำหนดเวลาทำเช่นนั้น


6

ฉันไม่มีประสบการณ์โดยตรงกับมัน แต่fcronดูเหมือนจะทำสิ่งที่คุณต้องการออกจากกล่อง ตามเอกสารคุณสามารถระบุความถี่:

# Get our mails every 30 minutes 
@ 30 getmails -all 

# make some security tests every 48 hours of system up time, 
# force a mail to be sent to root even if there is no output 
@mailto(root),forcemail 2d /etc/security/msec/cron-sh/security.sh

คุณเห็นที่นี่ 25 นาทีที่ไหน
Philomath

ใช้ fcron และ@ 25 commandควรทำเคล็ดลับ
Caleb

ขอบคุณ Caleb ฉันควรสร้างตัวอย่างที่เหมาะแทนการยกหนึ่งตรงจากเอกสาร
che2cbs

2

ให้ฉันอธิบายสั้น ๆ ว่าปัญหาคืออะไรที่นี่ การป้อน 25 ในฟิลด์นาทีทำให้เกิดcronการดำเนินการเมื่อนาทีของเวลาปัจจุบันเท่ากับ 25 นั่นคือหนึ่งครั้งต่อชั่วโมง คุณสามารถป้อนรายการการแข่งขันปัญหาคือว่า 60 (นาทีต่อชั่วโมง) ไม่สามารถหารด้วย 25 ดังนั้นคุณต้องเพิ่มหลายรายการตามชั่วโมง ตัวคูณร่วมที่น้อยที่สุดของ 60 & 25 คือ 300 นั่นคือ 5 * 60 ดังนั้นคุณจะต้องวนรอบ 5 ชั่วโมงจนกว่าจะกลับไปเริ่มต้นดั้งเดิม ตัวอย่างเช่น:

0, 25, 50
15, 40
5, 30, 55
20, 45
10, 35
...

แต่ที่นี่อีกครั้ง 24 (ชั่วโมงต่อวัน) หารด้วย 5 ไม่ได้ตัวคูณร่วมที่น้อยที่สุดของ 5 และ 24 คือ 5 * 24 = 120 และต่อไปเรื่อย ๆ ...


บางทีคำตอบควรเป็นความคิดเห็นของคำถามเดิม
Philomath

1

คุณสามารถเล่นกับเวลาแก้ไขล่าสุดของไฟล์

  • สร้างสคริปต์เล็กน้อย (ตัวอย่าง/usr/local/bin/age) ที่จะแสดงอายุของไฟล์:

    #bin/sh
    echo $(( $( date +%s ) - $( stat -c %Z $1 ) ))
    

crontab ของคุณจะมีลักษณะเช่นนี้ (สมมติว่า 25 นาทีเท่ากับ 1,500 วินาทีถ้าฉันพูดถูก)

* * * * *  [ $(/usr/local/bin/fileage /var/tmp/your_command.offset) -gt 1500  ] && touch /var/tmp/your_command.offset && your_command

โปรดทราบว่าฉันใช้/var/tmpแทน/tmpเพราะเป็นไปตามFHSไม่ควรจะถูกลบในการปิดระบบ / เริ่มต้น


-2

ฉันคิดว่าสิ่งต่อไปนี้ควรใช้งานได้ 0 0/25 * * *?


ตามความรู้ของฉันมันจะทำงานทุกนาที

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