Score:1

เริ่มงาน cron ตั้งแต่ 06:05 ถึง 22:05 ทุก ๆ 15 นาที

ธง cn

ฉันต้องเรียกใช้งาน cron ทุก ๆ 15 นาที เริ่มเวลา 06:05 น. และสิ้นสุดเวลา 22:05 น.

0 5/15 6-22 * * *

ไวยากรณ์ต่อไปนี้ประกอบด้วย 22:35 และ 22:50

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

Kernel Stearns avatar
de flag
นี่เป็นการแฮ็ค แต่สัญชาตญาณของฉันคือการเพิ่ม cronjob ที่รันที่ 0605 ซึ่งเพิ่ม cronjob อื่นที่รันสิ่งที่คุณต้องการทุก ๆ 15 นาที จากนั้นเพิ่มงาน cron สุดท้ายซึ่งจะลบงานย่อยที่ 2205
Score:4
ธง pe

âCron Job" โดย xmodulo ได้รับอนุญาตภายใต้ CC BY 2.0

*/15 6-22 * * * /path/to/script

หรือ

5,20,35,50 6-22 * * * /path/to/script

ช่องอาจเป็นเครื่องหมายดอกจัน (*) ซึ่งหมายถึง "ตัวแรก-ตัวสุดท้าย" เสมอ อนุญาตให้ใช้ช่วงของตัวเลข ช่วงคือตัวเลขสองตัวที่คั่นด้วยยัติภังค์ รวมช่วงที่ระบุ ตัวอย่างเช่น 8-11 สำหรับรายการ "ชั่วโมง" ระบุการดำเนินการที่ชั่วโมง 8, 9, 10 และ 11

อนุญาตให้ใช้รายการ รายการคือชุดของตัวเลข (หรือช่วง) ที่คั่นด้วยเครื่องหมายจุลภาค ตัวอย่าง: "1,2,5,9", "0-4,8-12"

สามารถใช้ค่าขั้นตอนร่วมกับช่วงได้การติดตามช่วงที่มี "" ระบุการข้ามค่าของตัวเลขผ่านช่วง ตัวอย่างเช่น สามารถใช้ "0-23/2" ในฟิลด์ชั่วโมงเพื่อระบุการดำเนินการคำสั่งทุกๆ ชั่วโมง (ทางเลือกอื่นในมาตรฐาน V7 คือ "0,2,4,6,8,10,12,14,16 ,18,20,22"). อนุญาตให้ใช้ขั้นตอนหลังจากเครื่องหมายดอกจัน ดังนั้นหากคุณต้องการพูดว่า "ทุก ๆ สองชั่วโมง" ให้ใช้ "*/2"

นอกจากนี้ยังสามารถใช้ชื่อสำหรับฟิลด์ "เดือน" และ "วันในสัปดาห์" ใช้ตัวอักษรสามตัวแรกของวันหรือเดือนนั้นๆ (ตัวพิมพ์เล็กไม่สำคัญ) ไม่อนุญาตให้ใช้ช่วงหรือรายการชื่อ

ฟิลด์ "ที่หก" (ส่วนที่เหลือของบรรทัด) ระบุคำสั่งที่จะรัน ส่วนคำสั่งทั้งหมดของบรรทัด จนถึงบรรทัดใหม่หรืออักขระ % จะถูกดำเนินการโดย /bin/sh หรือโดยเชลล์ที่ระบุในตัวแปร SHELL ของ cronfile เครื่องหมายเปอร์เซ็นต์ (%) ในคำสั่ง เว้นแต่จะมีการ Escape ด้วยแบ็กสแลช () จะถูกเปลี่ยนเป็นอักขระขึ้นบรรทัดใหม่ และข้อมูลทั้งหมดหลังจาก % แรกจะถูกส่งไปยังคำสั่งเป็นอินพุตมาตรฐาน

หมายเหตุ: วันของการดำเนินการคำสั่งสามารถระบุได้สองฟิลด์ - วันของเดือนและวันในสัปดาห์ หากฟิลด์ทั้งสองถูกจำกัด (เช่น ไม่ใช่ *) คำสั่งจะทำงานเมื่อฟิลด์ใดฟิลด์หนึ่งตรงกับเวลาปัจจุบัน ตัวอย่างเช่น, "30 4 1,15 * 5" จะทำให้คำสั่งทำงานเวลา 4:30 น. ของวันที่ 1 และ 15 ของแต่ละเดือน บวกทุกวันศุกร์

Gerrit avatar
cn flag
5,20,35,50 6-23 * * * วิ่งมากก็ถามไม่ใช่เหรอ
Arden Smith avatar
pe flag
ฉันอัปเดตคำตอบของฉันแล้ว
Gerrit avatar
cn flag
แต่สิ่งนี้จะยังคงทำงานในเวลา 22:20, 22:35 และ 22:50 นอกเหนือจากเวลาที่ผู้โพสต์ถาม
Gerrit avatar
cn flag
นอกจากนี้ยังสามารถใช้ SHELL= หลายบรรทัดในไฟล์ cron แต่ละบรรทัด SHELL จะนำไปใช้กับบรรทัดถัดไปจนกว่าจะมี SHELL= บรรทัดอื่น เหมือนกันสำหรับการตั้งค่า env
Score:3
ธง fr

ส่วนตัวผมจะแบ่งเป็นสองบรรทัดคือ

5-50/15 6-21 * * * /path/to/script
5 22 * ​​* * /path/to/script

บรรทัดแรกครอบคลุม 0605-2150 บรรทัดที่สอง - สำหรับการเรียกใช้เพิ่มเติมที่ 2205

หากคุณต้องการซับหนึ่งจริงๆ ฉันจะไปตรวจสอบที่ไม่แน่นอนเพื่อรองรับเวลาเริ่มงานที่ไม่แน่นอนที่เป็นไปได้:

5-50/15 6-22 * * * [[ $(date +"\%-H\%M") -le 2210 ]] && /path/to/script
Gerrit avatar
cn flag
ตัวระบุฟิลด์ "-" ในรูปแบบวันที่เพื่อหลีกเลี่ยงฐานแปดนั้นเป็นการบิดที่ดี เป็นมูลค่าการกล่าวขวัญว่าทางขวามือของ -le คุณไม่ควรใส่ค่าเช่น 0630 เช่นกัน เพราะจะถูกตีความว่าเป็นเลขฐานแปด
Score:1
ธง cn

เป็นไปได้ด้วย cronline หนึ่งตัว แต่ต้องใช้กลอุบายเท่านั้น

SHELL=/ถัง/ทุบตี
5-50/15 6-22 * * * [[ '2220 2235 2250' =~ "$(วันที่ +\%H\%M)" ]] || /เส้นทาง/ถึง/สคริปต์

หรือกับ (และทุบตี)

SHELL=/ถัง/sh
5-50/15 6-22 * * * กรณี "$(วันที่ +\%H\%M)" ใน 2220|2235|2250);; *) /path/to/script;;esac

หมายเหตุเครื่องหมายทับขวาสำหรับอักขระเปอร์เซ็นต์ (%) ซึ่งจำเป็นสำหรับ crontabs

Score:1
ธง cn
Bob

ฉันเป็นผู้สนับสนุนที่แข็งแกร่งในการทำสิ่งต่าง ๆ ให้เรียบง่าย

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

ฉันจะพยายามหลีกเลี่ยงสิ่งนั้นและทำสิ่งต่อไปนี้:

# .---------------- นาที (0 - 59)
# | .------------ ชั่วโมง (0 - 23)
# | | .---------วัน เดือน (1 - 31)
# | | | .------- เดือน (1 - 12) 
# | | | | .---- วันในสัปดาห์ (0 - 6) (วันอาทิตย์=0 หรือ 7) 
# | | | | |
# * * * * * คำสั่งที่จะดำเนินการ

# เรียกใช้ my_batch ทุก ๆ 15 นาที เริ่มเวลา 06:05 น. และสิ้นสุดเวลา 22:05 น. (กรณีมุม) 

5/15 6-21 * * * my_batch
5 22 * ​​* * my_batch

เมื่อกำหนดการของคุณซับซ้อนมากขึ้นและไม่เหมาะที่จะประกาศในกำหนดการ cron แบบธรรมดา วิธีแก้ไขที่ฉันต้องการคือสร้างตรรกะลงในงานแบตช์เอง (หรือตัวห่อหุ้มเชลล์รอบงานแบตช์)

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

# เรียกใช้ my_batch_wrapper ทุก ๆ 15 นาที 

5/15 * * * * my_batch_wrapper

และในรหัสเทียม my_batch_wrapper

   # ห้ามรัน my_batch ก่อน 06:05 หรือหลัง 22:05 น 

   ถ้า [ ตอนนี้() < 06:05 ] ; ทางออก 0 

   ถ้า [ ตอนนี้() > 22:06 ] ; ทางออก 0 

  
   /path/to/my_batch 

โพสต์คำตอบ

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