ไทย

เครื่องมือสำหรับนักพัฒนา · ตัวสร้าง Crontab

งาน Cron ทำงานในเชลล์ แต่ไม่ใช่ใน crontab: PATH และสภาพแวดล้อม

· มันทำงานอย่างไร

cron การตรวจสอบ นักพัฒนาเวิร์กโฟลว์

กำหนดการห้าฟิลด์ที่ได้รับการตรวจสอบแล้วสิ้นสุดที่ขอบเขตก่อนเชลล์คำสั่ง
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

Cron ไม่ได้อ่าน .bashrc ของคุณ ไม่ใช้ bash และเริ่มต้นด้วย PATH จากไดเร็กทอรีบางส่วน โพสต์นี้จะอธิบายสภาพแวดล้อมที่งาน cron ได้รับจริงและสามบรรทัดที่แก้ไขความล้มเหลวส่วนใหญ่

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

ผลลัพธ์สีเขียวสำหรับ `0 2 * * *` พิสูจน์ว่า ToolAcre จดจำกำหนดการ 02:00 รายวัน ไม่ได้พิสูจน์ว่ามีสคริปต์อยู่ สามารถดำเนินการได้ ค้นหาการขึ้นต่อกันของสคริปต์ หรือเขียนเอาต์พุต parser ได้รับเพียงห้าฟิลด์ ดังนั้นคำสั่งที่ล้มเหลวในภายหลังจึงไม่ขัดแย้งกับการตรวจสอบความถูกต้องของกำหนดการ

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

เครื่องกำเนิดไฟฟ้าสามารถตรวจสอบเวลาได้ในขณะที่คำสั่งที่ดำเนินการแยกกันยังคงล้มเหลว

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

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

ตัวแปรสภาพแวดล้อมที่จัดทำโดย cron daemon เป็นหลักฐานจากพื้นที่เก็บข้อมูลภายนอก

ไม่มีเชลล์ใดรับนิพจน์ภายใน ToolAcre `parseCron` โทเค็นสร้างฟิลด์กำหนดการที่คั่นด้วยช่องว่าง ขยายไวยากรณ์เล็กๆ และหยุด แม้แต่การกระทำ "คัดลอกบรรทัด crontab" ก็ยังผนวก `/usr/local/bin/your-command` เป็นตัวยึดตำแหน่งที่ชัดเจน ไม่ได้เลือกเชลล์หรือไวยากรณ์ทดสอบเชลล์

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

เครื่องมือนี้ไม่ได้แยกวิเคราะห์หรือเลือกเชลล์คำสั่ง

บรรทัดการมอบหมาย เช่น `PATH=...` หรือ `SHELL=...` ไม่ได้รับการยอมรับจากกล่องนิพจน์ มีช่องกำหนดเวลาน้อยกว่าห้าช่องและไม่ผ่านการตรวจสอบ สิ่งนี้ถูกต้องสำหรับจุดประสงค์ที่แคบของเส้นทาง: parser ของมันคือ parser นิพจน์ ไม่ใช่ parser ไฟล์ crontab ที่สมบูรณ์

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

ไวยากรณ์การกำหนด Crontab อยู่นอกอินพุตห้าฟิลด์

พฤติกรรมของพาธสัมบูรณ์และสัมพัทธ์เป็นของกระบวนการที่รันคำสั่งในท้ายที่สุด ToolAcre ไม่เรียก `chdir` ตรวจสอบระบบไฟล์หรือแก้ไขไฟล์ปฏิบัติการ รายการแหล่งที่มาประกอบด้วยเลขคณิตปฏิทินและการควบคุมเบราว์เซอร์ ไม่ใช่โค้ดการวางไข่ของกระบวนการ นิพจน์ที่คัดลอกไม่มีข้อมูลไดเร็กทอรีการทำงาน

การตรวจสอบการปรับใช้ควรระบุไฟล์ปฏิบัติการ เส้นทางข้อมูล และบัญชีแยกจากกัน การตรวจสอบเหล่านั้นอาจเปิดเผยไฟล์ที่หายไปแม้ว่าเวลาที่ดูตัวอย่างทุกครั้งจะถูกต้องก็ตาม กำหนดการสามารถนำกลับมาใช้ใหม่ได้ควบคู่ไปกับคำสั่งต่างๆ ซึ่งเป็นเหตุผลว่าทำไมการแยกวิเคราะห์ที่ประสบความสำเร็จจึงไม่สามารถบอกเป็นนัยได้ว่าสามารถเข้าถึงคำสั่งใดคำสั่งหนึ่งได้

เส้นทางและไดเร็กทอรีการทำงานยังคงเป็นข้อกังวลในการปรับใช้

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

ตัวอย่างเช่น สร้าง `30 2 * * *` และตรวจสอบว่าคำอธิบายระบุว่า 02:30 ทุกวันในโซนที่เลือก คัดลอกเฉพาะฟิลด์เหล่านั้นไปยังงานการปรับใช้ บทความนี้ไม่ได้กำหนดเส้นทาง Python สภาพแวดล้อมเสมือนหรือการเปลี่ยนเส้นทางเนื่องจากไม่มีการใช้งานที่สอดคล้องกันในพื้นที่เก็บข้อมูลเพื่อยืนยัน

ขอบเขตการทำงาน: ตรวจสอบตารางเวลา จากนั้นทดสอบคำสั่งที่ไม่เป็นอันตรายในสภาพแวดล้อมเป้าหมาย

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

หากปลายทางปฏิเสธนิพจน์ที่ถูกต้อง ToolAcre ให้เปรียบเทียบจำนวนฟิลด์และตัวดำเนินการที่รองรับก่อนที่จะเปลี่ยนค่า หากยอมรับนิพจน์แต่งานล้มเหลว ให้ปล่อยกำหนดการไว้ตามลำพังในขณะที่ตรวจสอบสัญญาคำสั่งของปลายทาง ทางแยกนั้นแยกการดีบักไวยากรณ์ออกจากการดีบักรันไทม์

ตัวกำหนดเวลาและคอนเทนเนอร์อื่นๆ ไม่ได้รับการสร้างแบบจำลอง

บรรทัด cron รวมสองระบบ: นิพจน์ปฏิทินและการดำเนินการที่ปฏิบัติการได้ ToolAcre เป็นเจ้าของครึ่งแรกเท่านั้น โดยจะตรวจสอบช่วง รายการ ขั้นตอน นามแฝง และซีแมนทิกส์ของฟิลด์วัน จากนั้นอธิบายและดูตัวอย่าง ไม่มีการรับประกันการดำเนินการ และไม่ควรใช้เป็นหลักฐานว่าคำสั่งสำเร็จ

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