ฉันจะทำให้ cron ทำงานได้อย่างไรในตอนนี้สำหรับการทดสอบ / การดีบัก โดยไม่ต้องเปลี่ยนกำหนดการ!


133

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


ฉันไม่เข้าใจคำถามของคุณ? ทำไมไม่เรียกใช้คำสั่งง่ายๆ?
favadi

20
ฉันรู้ว่าคำสั่งทำงานเมื่อป้อนในเชลล์ (เปลือกของฉัน) แต่ฉันต้องการทราบว่าทำงานได้เมื่อcronรันมันอาจได้รับผลกระทบจาก ENV หรือสิ่งเฉพาะเปลือก ( ~ขยาย) หรือสิ่งที่เป็นเจ้าของและสิทธิ์หรือ ...
Ali

2
เหตุใดจึงไม่สร้างงาน cron ใหม่ทำงานทุกนาทีด้วยคำสั่งเดียวกัน
favadi

13
ตรงนี้เป็นสิ่งที่ฉันทำลงไป แต่ฉันสงสัยว่าถ้ามีวิธีที่จะบอก cron คุณต้องการทดสอบการทำงานในข้อ 7! แน่นอนว่าคนอื่นมีปัญหานี้ / คำขอ / ความปรารถนามาก่อน!
Ali

4
ดึกมากที่นี่ผ่าน google แต่มีทุกอย่างผิดปกติเกี่ยวกับคำตอบของ favadi เห็นได้ชัดว่าเขาต้องการทดสอบจาก cron และไม่มีการแก้ไข crontab โดยเฉพาะเพื่อทำเช่นนั้น แย่กว่ามีคนบอกคุณว่าคุณต้องการอะไรผิดเมื่อพวกเขาไม่ได้พยายามที่จะเข้าใจกรณีการใช้งาน
HörmannHH

คำตอบ:


32

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


57

คุณสามารถบังคับให้ crontab รันด้วยคำสั่งต่อไปนี้:

run-parts /etc/cron.daily

9
... โดยสมมติว่างาน cron ของ OP (ถามเมื่อ 3 ปีก่อน) อยู่ใน cron.daily ซึ่งต่างจาก crontab ของแต่ละบุคคล
Jeff Schaller

18
นี้ไม่ได้อย่างเต็มที่จำลองสภาพแวดล้อมของผู้ cron ของอย่างไรดังนั้นจึงเป็นไปได้มากว่าคุณจะยังคงมีข้อบกพร่องเพราะเมื่อคุณเรียกใช้สคริปต์ของคุณเป็นงาน cron ที่เกิดขึ้นจริงและเส้นทาง envvars อื่น ๆ ของคุณอาจแตกต่างจากผู้ใช้ที่คุณไม่ได้run-parts /etc/cron.dailyเป็น ฉันกำลังต่อสู้กับข้อผิดพลาดนี้ในขณะที่สคริปต์ของฉันจะทำงานได้ดีrun-partsแต่ล้มเหลวเมื่อทำงานภายใต้ผู้ใช้ cron
ArtHare

42

คุณสามารถจำลองสภาพแวดล้อม cron ผู้ใช้ตามที่อธิบายใน"วิ่งงาน cron ตนเองและทันที" สิ่งนี้จะช่วยให้คุณสามารถทดสอบงานได้เมื่อมันจะทำงานในฐานะผู้ใช้ cron


ตัดตอนมาจากลิงค์:


ขั้นตอนที่ 1 : ฉันวางบรรทัดนี้ชั่วคราวใน crontab ของผู้ใช้:

* * * * *   /usr/bin/env > /home/username/tmp/cron-env

จากนั้นนำออกมาเมื่อไฟล์ถูกเขียน

ขั้นตอนที่ 2 : ทำให้ตัวเองเป็นสคริปต์ทุบตี run-as-cron เล็กน้อยที่มี:

#!/bin/bash
/usr/bin/env -i $(cat /home/username/tmp/cron-env) "$@"

ดังนั้นในฐานะผู้ใช้ที่เป็นปัญหาฉันสามารถ

run-as-cron /the/problematic/script --with arguments --and parameters

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