ทำไม cron ของฉันถึงทำงานในเดือนนี้


31

วันนี้คือวันที่ 1 พฤศจิกายน 2016 หรือตัวเลข (ไม่ชัดเจน), 2016-11-01

ฉันมีงาน cron ผู้ใช้ตั้งค่าเช่นนี้:

# m h  dom mon dow   command
33  3   1  */2  *    /home/user/...

ควรทำงานทุก ๆ เดือนในวันที่ 1 ของเดือนเวลา 3:33 น. ไม่ว่าวันนั้นจะเป็นสัปดาห์ใด แต่ด้วยเหตุผลบางอย่างที่เปิดให้บริการในวันนี้แม้ว่า 11 จะไม่สามารถหารด้วย 2 ได้

มีคนอธิบายฉันได้ไหม การสันนิษฐานของฉันเกี่ยวกับการหารด้วย 2 ผิดหรือเปล่า?

แก้ไข: ฉันลืมที่จะพูดถึงฉันกำลังใช้cronรุ่น "3.0pl1-127 + deb8u1" บนเครื่อง Debian 8.6 "Jessie"



ดังนั้นคุณกำลังพูดถึงวันที่ 11 ของเดือน 2559 ปี 1 แล้ว :) (คำสั่งซื้อวันที่ที่พบบ่อยที่สุดในอเมริกาคือเดือน - วัน - ปี)
ลูกไก่

@ ลูกไก่ตรวจสอบประวัติการแก้ไขของคำถามนี้ฉันใช้รูปแบบที่คุณกล่าวถึง ;-)
comfreak

@ ลูกไก่คุณหมายถึงเดือน / วัน / ปีหรือไม่
user253751

@immibis เลขที่ ... comfreak: lol
chicks

คำตอบ:


61

/ไม่ได้เป็นการแสดงออกทางคณิตศาสตร์แทนจะอธิบาย "ค่าขั้นตอน" เหนือได้รับอนุญาตช่วงของค่า ดังนั้นตั้งแต่เดือนมักจะเริ่มต้นด้วยการ1แทน0, /2จะหมายถึง "ใช้ทุกค่าอื่น" ส่งผลให้ใน (1, 3, 5, 7, 9, 11)

นี่คือ decribed ในหน้าคู่มือแม้ว่าจะไม่ได้เป็นที่ชัดเจนและเข้าใจง่าย:

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


2
ขอบคุณสำหรับคำตอบของคุณฉันเพิ่งเข้าใจตัวเองหลังจากอ่าน man page อีกครั้งและทำงานผ่านหัวของฉัน ฉันมักจะทำงานกับงาน cron ระยะสั้นที่ตัวเลขเริ่มต้นด้วย 0 และสมมติฐานของฉันทำให้รู้สึกจริงในทาง
comfreak

18
ฉันเพิ่งรำพึงว่าทำไมคำถามนี้ไม่ได้ถูกถามบ่อยขึ้นและได้ข้อสรุปที่เหมือนกัน: เพราะมีเพียงไม่กี่คนที่ทำงานด้วยสิ่งใดก็ตามที่เป็น "*" ในฟิลด์เดือน
สเวน

คำถามหนึ่งจะเกิดอะไรขึ้นถ้าจำนวนไม่หารเช่น*/5? มันจะเป็น 1,6,11,1,6 ... หรือมันจะเป็น 1,6,11,4,9 ... ฉันสันนิษฐานว่า "ช่วงค่าที่อนุญาต" หมายความว่าไม่มีหน่วยความจำ แต่ตอนนี้ฉันไม่แน่ใจ
MariusSiuram

@MariusSiuram: ตัวแปรแรก นี่ไม่ใช่การดำเนินการทางคณิตศาสตร์ crondใช้รายการของค่าที่เป็นไปได้ใช้ตัวเลือกขั้นตอนหนึ่งครั้งแล้วใช้ผลลัพธ์เหล่านี้ซ้ำ ๆ
สเวน

4

วันนี้เป็นวันแรกของเดือนพฤศจิกายน

* / 2 หมายความว่า cronjob ของคุณจะทำงานทุก ๆ เดือนตามที่คุณพูด

ดังนั้นเดือนถัดไป (ธันวาคม) cronjob จะไม่ถูกดำเนินการ แต่เดือน (มกราคม) หลังจากนั้นจะเป็น

เดือนก่อนเดือนนี้ (ตุลาคม) cronjob ไม่ได้ถูกดำเนินการ แต่ในเดือนกันยายนมันเป็น


1
ดังนั้นคุณคิดว่า*/2ในด้านเดือนเทียบเท่ากับมากกว่า1-11/2 2-12/2ฉันไม่ได้บอกว่าคุณทำผิด แต่คุณสามารถจัดทำเอกสารประกอบได้หรือไม่?
MadHatter สนับสนุน Monica

@ MadHatter Sven อธิบายได้ดี
เด็กกำพร้า

1
ฉันเห็นด้วยและดีที่สุดจากทั้งหมดที่เขาอ้างถึงแหล่งที่เชื่อถือได้
MadHatter สนับสนุน Monica

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