ฉันจะให้งาน cron ทำงานทุก ๆ 30 นาทีได้อย่างไร


224

ฉันต้องการเพิ่มcrontabรายการเพื่อเรียกใช้สคริปต์ทุก ๆ 30 นาทีในชั่วโมงและ 30 นาทีที่ผ่านมาในชั่วโมงหรือบางสิ่งที่ใกล้เคียง ฉันมีสิ่งต่อไปนี้ แต่ดูเหมือนว่าจะไม่ทำงานใน 0

*/30 * * * *

ฉันต้องใช้สตริงอะไร

cron กำลังทำงานบน OSX


คุณประสบความสำเร็จในการทำให้ crontab ทำงานหรือไม่? ปัญหาของคุณอาจไม่ใช่ crontab แต่ทำให้ใช้งานได้
Eddie

ใช้สคริปต์อื่นอีก 2 สคริปต์ทุกหนึ่งนาที
Darryl Hein

1
ฉันรอเพื่อดูว่าหนึ่งในคำตอบด้านล่างใช้งานได้หรือไม่เพียงแค่รอจนกว่า 30 นาทีถัดไปจะหมด ... ใน 3 นาที
Darryl Hein

2
... คุณไม่สามารถเปลี่ยน 0,30 เป็น 0,5 หรือไม่ หาก 0,5 ใช้ได้ทำไมจะไม่ 0,30
George Stocker

1
คุณไม่เคยบอกเราถ้ามันทำงานในชั่วโมง!
Eddie

คำตอบ:


487

ทำ:

0,30 * * * * your_command

1
ใช้งานได้ดี! ใน CentOS crontab ฉันต้องทำสิ่ง0,30 * * * * root your_commandที่รูตจะเป็นผู้ใช้ที่ฉันใช้
prograhammer

@prograhammer - นี่เป็นส่วนหนึ่งของ crontab ของรูทหรือ crontab ของผู้ใช้คนอื่น ๆ ?
Muhamed Huseinbašić

@ MuhamedHuseinbašićเป็นคำถามที่ดีเนื่องจากมี 2 crontabs ที่แตกต่างกัน (ระดับโลกและจากนั้นผู้ใช้) ฉันจะต้องตรวจสอบและดู ...
prograhammer

100

crontab ไม่เข้าใจ "ช่วงเวลา" จะเข้าใจเฉพาะ "ตารางเวลา" เท่านั้น

เวลาที่ถูกต้อง: 0-23 - นาทีที่ถูกต้อง: 0-59

ตัวอย่าง # 1

30 * * * * your_command

นี่หมายความว่า "ทำงานเมื่อนาทีของแต่ละชั่วโมงคือ 30 " (จะทำงานที่: 1:30, 2:30, 3:30 ฯลฯ )

ตัวอย่าง # 2

*/30 * * * * your_command

นี่หมายความว่า "ทำงานเมื่อนาทีของแต่ละชั่วโมงหารด้วย 30 " (จะทำงานที่: 1:30, 2:00, 2:30, 3:00, ฯลฯ )

ตัวอย่าง # 3

0,30 * * * * your_command

ซึ่งหมายความว่า "ทำงานเมื่อนาทีของแต่ละชั่วโมงเป็น 0 หรือ 30 " (จะทำงานที่: 1:30, 2:00, 2:30, 3:00, ฯลฯ )

เป็นอีกวิธีหนึ่งในการบรรลุผลลัพธ์เช่นเดียวกับตัวอย่าง # 2

ตัวอย่าง # 4

19 * * * * your_command

นี่หมายความว่า "ทำงานเมื่อนาทีของแต่ละชั่วโมงคือ 19 " (จะทำงานที่: 1:19, 2:19, 3:19, ฯลฯ )

ตัวอย่าง # 5

*/19 * * * * your_command

นี่หมายความว่า "ทำงานเมื่อนาทีของแต่ละชั่วโมงหารด้วย 19 " เท่ากัน (จะทำงานที่: 1:19, 1:38, 1:57, 2:19, 2:38, 2:57, ฯลฯ )

หมายเหตุ: มีการปรับแต่งหลายครั้งในโพสต์นี้โดยผู้ใช้หลายคนรวมถึงผู้แต่ง


76

ลองสิ่งนี้:

0,30 * * * * your command goes here

ตามที่อย่างเป็นทางการ Mac OS X crontab (5) manpageที่/ไวยากรณ์ได้รับการสนับสนุน ดังนั้นเพื่อหาสาเหตุที่ทำให้คุณไม่ทำงานคุณจะต้องดูบันทึกของ cron ในบันทึกเหล่านั้นคุณควรพบข้อความแจ้งความล้มเหลวที่ชัดเจน

หมายเหตุ: Mac OS X ปรากฏว่าใช้ Vixie Cron เช่นเดียวกับ Linux และ BSD


ฉันเคยใช้ * / 30 กับความสำเร็จเสมอ แต่ฉันจำไม่ได้ว่าแอปพลิเคชันของฉันอยู่ที่ไหนซึ่งมันสำคัญมากถ้ามันวิ่งแค่ชั่วโมงละครั้งดังนั้นฉันจึงไม่คิดว่าฉันเคยตรวจสอบมาก่อน
Adam Hawes

2
@ Adam Hawes: ฉันเคยใช้ * / xx กับความสำเร็จในอดีต แต่ใน Linux และ UNIX อื่น ๆ ฉันไม่ได้ลองใช้ Mac OSX เป็นการส่วนตัว คำถามเดิมไม่ได้บอกว่าระบบปฏิบัติการใด UNIX ที่เก่ากว่าบางตัวไม่รองรับ * / xx
Eddie

คำตอบของคุณยังใช้งานได้ แต่วลาดมีตัวแทนน้อยลงดังนั้นฉันจึงให้คะแนนแก่เขา
Darryl Hein

1
@DarrylHein lol วันนี้ Eddie มีจำนวนพนักงาน :-p น้อยลง ฉันโหวตเอ็ดดี้
beginer

10

หากงาน cron ของคุณทำงานบน Mac OS X เท่านั้นคุณอาจต้องการใช้ launchd แทน

จากการตั้งเวลางานที่กำหนดไว้ (เอกสาร Apple อย่างเป็นทางการ) :

หมายเหตุ: แม้ว่าจะยังคงรองรับ cron ไม่ใช่โซลูชันที่แนะนำ มันเลิกใช้แล้วในความโปรดปรานของ launchd

คุณสามารถค้นหาข้อมูลเพิ่มเติม (เช่นหน้าlaunchd Wikipedia ) ด้วยการค้นหาเว็บอย่างง่าย


5

คุณพูดถึงว่าคุณกำลังใช้ OS X- ฉันเคยใช้cronnixมาก่อน มันไม่ได้เป็น geeky แก้ไขตัวเอง แต่มันช่วยให้ฉันเรียนรู้ว่าคอลัมน์อยู่ในระยะเวลาอันสั้น แค่ความคิด


นี่อาจเป็นประโยชน์เป็นอย่างอื่นเช่นกัน
Darryl Hein

3

คุณสามารถใช้ทั้งสัญลักษณ์' , ' หรือหาร ' / '
แต่ ' / ' ดีกว่า
สมมติกรณีของ 'ทุก 5 นาที' ถ้าคุณใช้ ' , ' คุณต้องเขียนงาน cron ดังต่อไปนี้:

0,5,10,15,20,25,30,35,....    *      *     *   * your_command

มันหมายถึงการรัน your_command ในทุก ๆ ชั่วโมงในทุกนาทีที่กำหนด: 0,5,10, ...

อย่างไรก็ตามถ้าคุณใช้ '/' คุณสามารถเขียนงานง่ายและสั้นดังต่อไปนี้:

*/5  *  *  *  *  your_command

มันหมายถึงการรัน your_command ในนาทีที่หารด้วย 5 หรือในคำที่ง่ายกว่า '0,5,10, ... '

ดังนั้นสัญลักษณ์ที่หารได้ '/' เป็นตัวเลือกที่ดีที่สุดเสมอ

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