ฉันจะทดสอบสคริปต์ cron ใหม่ได้อย่างไร


14

ฉันกำลังใช้งาน Linux distros สองสามตัว (Fedora 11, CentOS 5 และ SuSE 10.2) และมักพบปัญหาที่สคริปต์ใหม่ที่ฉันต้องการเรียกใช้เป็นงาน cron ทำงานได้ดีเมื่อเรียกใช้โดยตรงจากบรรทัดคำสั่ง แต่ล้มเหลวเมื่อถูกเรียกจาก cron เนื่องจากความผันแปรเล็กน้อยใน PATH หรือตัวแปรสภาพแวดล้อมอื่น ๆ ที่จำเป็น

มีวิธีที่ฉันสามารถทดสอบการใช้งานสคริปต์แต่ละตัวราวกับว่ามันถูกเรียกใช้จาก cron โดยไม่ต้องเรียกใช้ crontab ทั้งหมดหรือใช้ run-parts เพื่อเรียกใช้ไดเรกทอรี cron.daily / .hourly ฯลฯ ทั้งหมด? ฉันเดาว่าฉันสามารถแก้ไข crontab ของฉันชั่วคราวเพื่อเรียกใช้สคริปต์ในอีกไม่กี่นาทีข้างหน้า แต่ฉันควรจะมีวิธีแก้ปัญหาแบบสแตนด์อโลนเพิ่มเติมเพื่อที่ฉันจะได้ไม่เสี่ยงที่จะสับสนกับ crontab

คำตอบ:


9

จากการค้นหาบนgooglepath in crontab

root@pingu # cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

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


ขอบคุณฉันไม่ได้ทวิกว่า crontab นั้นเหมือนกับสคริปต์ที่คุณสามารถประกาศตัวแปรสภาพแวดล้อมภายใน crontab ได้
gareth_bowles

7

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

จากบันทึกย่อด้านข้างถ้าฉันต้องการทดสอบว่า cron ทำงานอย่างถูกต้องและส่งผลลัพธ์ทางอีเมลไปยังที่อยู่ที่ถูกต้อง (สำคัญมาก) ฉันจะเพิ่มบรรทัดต่อไปนี้ใน / etc / crontab ของฉัน:

 * * * * * root ls /doesnotexistfoobar

ทำงานทุกนาทีและพยายามทำlsในไดเรกทอรีที่ไม่มีอยู่ ควรส่งอีเมลข้อความล้มเหลวทุกนาที ฉันแสดงความคิดเห็นออกเมื่อฉันได้มันทำงาน

กลับไปที่คำถามของคุณ: คุณอาจไม่ต้องการแก้ไขงาน cron ที่มีอยู่ให้ทำงานบ่อย ๆ เพราะทั้งคู่มีโอกาสที่จะลืมที่จะเปลี่ยนกลับและเพราะคุณทำงาน cron.hourly, cron.daily หรือ cron บ่อยครั้ง อาจมีผลข้างเคียงขึ้นอยู่กับสิ่งที่คุณมี เพื่อให้แน่ใจว่าคุณกำลังเรียกใช้สคริปต์ในสภาพแวดล้อมเดียวกันกับที่จะถูกเรียกใช้จาก cron เราขอแนะนำให้คุณปรับเปลี่ยนเคล็ดลับ "ls" ของฉันด้านบน:

เพิ่มบรรทัดใน crontab ของคุณเพื่อเรียกใช้สคริปต์โดยตรง:

 * * * * * root /etc/cron.hourly/customscript

ด้วยวิธีนี้คุณสามารถเรียกใช้ได้บ่อยเท่าที่คุณต้องการเพื่อทดสอบ


ขอบคุณ - ถ้าฉันสามารถลงคะแนนให้กับคำตอบนี้เป็นคำตอบที่ถูกต้องเช่นกันฉันจะ!
gareth_bowles

0

ฉันไม่รู้วิธีแก้ปัญหาที่ตรงไปตรงมามากกว่านี้ แต่คุณสามารถสร้างผู้ใช้ (พูด crontest) กับ privs ให้กับสคริปต์ของคุณและใช้ crontab เฉพาะผู้ใช้สำหรับผู้ใช้ 'crontest' เพื่อทดสอบสคริปต์โดยการแก้ไข เพื่อให้สคริปต์ทำงานในไม่กี่นาทีถัดไป

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