มีการประมวลผลรายการ @daily crontab หลายรายการตามลำดับหรือไม่


22

ฉันต้องการให้งานสองงานวิ่งเป็นบางครั้งทุกวันตามลำดับที่ฉันระบุ crontab นี้จะทำสิ่งที่ฉันต้องการได้อย่างน่าเชื่อถือหรือไม่

@daily job1
@daily job2

ฉันสมมติว่าพวกเขาทำงานอย่างใดอย่างหนึ่งหลังจากที่อื่น ๆ แต่ผมก็ไม่สามารถที่จะหาคำตอบด้วยการค้นหาเว็บหรือจากส่วนใดของ manpages เหล่านี้: cron(1), ,crontab(1)crontab(5)

เห็นได้ชัดว่า crontab ด้านบนจะไม่ทำในสิ่งที่ฉันต้องการถ้า cron ทำงานตามที่กำหนดไว้@dailyในแบบคู่ขนานหรือในลำดับที่คาดเดาไม่ได้

ฉันรู้ว่าฉันสามารถสร้างเชลล์สคริปต์เพียงหนึ่งตัวเพื่อไล่พวกเขาออกไปตามลำดับฉันแค่อยากรู้ว่า cron ควรทำงานอย่างไร (และฉันขี้เกียจเกินไปที่จะรวบรวมข้อมูลทดสอบหรืออ่านซอร์สโค้ด)

Cron ให้บริการโดยcronแพคเกจ ระบบปฏิบัติการคือ Ubuntu 10.04 LTS (เซิร์ฟเวอร์)


คุณรู้หรือไม่ว่า cron บรรจุอยู่ในcronแพ็คเกจ? เกือบทุก cron daemons ที่ฉันรู้จะจัดการกับสิ่งนี้ตามลำดับและแบบซิงโครนัสโดยทั่วไปจะแยกวิเคราะห์แต่ละไฟล์ตามลำดับตัวอักษรก่อน (แม้ว่าบางคนจะทำตามระยะเวลาระหว่างการรันตามลำดับจากน้อยไปหามาก) จากนั้นงานภายในตามลำดับ
Chris Down

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

@ChrisDown: Vixie Cron ฉันคิดว่า packages.ubuntu.com/lucid/cron
Adam Monsen

1
ฉันอยากจะแนะนำถ้าคุณต้องการที่จะเรียกใช้พวกเขาตามลำดับให้ดำเนินการหนึ่งนาทีในภายหลัง
เควิน

@ jw013 และ Kevin: เห็นด้วย แต่นั่นไม่ใช่คำถามของฉัน
Adam Monsen

คำตอบ:


26

หลังจากเหลียวดูแหล่งที่มาอย่างรวดเร็ว (ใน Debian squeeze ซึ่งฉันคิดว่าเป็นเวอร์ชั่นเดียวกัน) ดูเหมือนว่าจะมีรายการภายในไฟล์ที่กำหนดและในเวลาเดียวกันก็จะดำเนินการตามลำดับ สำหรับจุดประสงค์นี้@dailyและ0 0 * * *เหมือนกัน (ในความ@dailyเป็นจริงเหมือนกับ0 0 * * *ใน cron นี้)

ฉันจะไม่พึ่งพาสิ่งนี้ทั่วกระดาน เป็นไปได้ว่าวันหนึ่งมีคนตัดสินใจว่า cron ควรทำงานแบบขนานเพื่อใช้ประโยชน์จาก CPU แบบ 32 คอร์เหล่านี้ที่มี 31 คอร์ที่ไม่ทำงาน สิ่งนี้อาจทำได้เมื่อใช้งานสิ่งที่ต้องทำรายการสิ่งที่ต้องทำ 20 ปีในแหล่ง cron:

สิ่งเหล่านี้ควรถูกตั้งค่าสถานะและ จำกัด การโหลด นั่นคือแทนที่จะเป็น @ ทุกความหมาย "0 * * * *" มันควรจะหมายถึง "ใกล้กับด้านหน้าของทุก ๆ ชั่วโมง แต่ไม่ใช่จนกว่าภาระของระบบจะต่ำ" (…) (vix, jan90)

มันง่ายมากที่จะเขียน@daily job1; job2ที่นี่ หากเป็นสิ่งสำคัญที่งานจะดำเนินการตามลำดับให้เป็นผลโดยตรงจากสิ่งที่คุณเขียน

นอกจากนี้การสั่งซื้ออย่างชัดเจนจะช่วยลดความเสี่ยงที่ผู้ดูแลระบบในอนาคตจะเรียงลำดับบรรทัดที่คิดว่าไม่สำคัญ


5

http://ss64.com/osx/crontab.html (รวมถึงการอ้างอิงอื่น ๆ ) กล่าวว่า @daily เทียบเท่า

0 0 * * *

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

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


สิ่งนี้ช่วยได้ขอบคุณ ฉันเห็นด้วยกับข้อเสนอแนะของ @ jw013 ถูกต้อง แต่นั่นไม่ใช่คำถามที่ฉันถาม ฉันเดาว่าฉันจะต้องปรึกษากับแหล่งข้อมูลจริงเพื่อหาคำตอบที่ชัดเจนเนื่องจากนี่อาจเป็นเรื่องเฉพาะสำหรับการใช้งาน
Adam Monsen

0

@Giles แสดงความคิดเห็นในการใช้สคริปต์เดียวเมื่อมีการนำเข้าเพื่อเรียกใช้สิ่งต่าง ๆ ตามลำดับที่เหมาะสม

cron.dailyไฟล์ไม่ได้ระบุเวลาทำงาน เป็นประสบการณ์ของฉันที่พวกเขาทำงานอย่างจริงจัง นี่เป็นเหตุผลว่างานแบ็คกราวน์มากมายที่อาจทำงานบนแล็ปท็อปหรือระบบอื่น

เมื่อระบุเวลางานทั้งหมดที่จัดตารางเวลาสำหรับนาทีปัจจุบันจะถูกรัน เป็นความคิดที่ดีที่จะใช้เวลาที่ต่างกัน

หากคุณมีงานที่ไม่เกิดร่วมกันเป็นเรื่องปกติที่จะใช้ไฟล์ล็อคเพื่อพิจารณาว่างานอื่นกำลังทำงานอยู่หรือไม่


@daily/etc/cron.dailyจะแตกต่างออกไปเล็กน้อย อดีตเป็นไวยากรณ์ทางเลือกสำหรับใช้ใน crontab run-partsนอกจากนี้ยังมีลักษณะที่ ระบบของฉันใช้เพื่อเรียกใช้โปรแกรมในrun-parts /etc/cron.dailyตามrun-parts(8)manpage, "ไฟล์ถูกเรียกใช้ในการเรียงลำดับคำศัพท์ของชื่อของพวกเขา ... "
Adam Monsen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.