ตรวจสอบว่า crontab ทำงานหรือไม่


82

ฉันต้องการตรวจสอบว่า crontab บางอย่างทำงานอย่างถูกต้องหรือไม่ ฉันได้เพิ่มงานเช่นนี้:

  */2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1

ฉันรู้ว่าฉันเปลี่ยนเส้นทางไปยังอุปกรณ์ null แต่ฉันไม่แน่ใจว่าคำสั่งดังกล่าวดี

* แก้ไข 1: ใน / var / log / syslog ของฉันทุกสองนาทีฉันมีข้อผิดพลาดต่อไปนี้:

 (CRON) error (grandchild #2788 failed with exit status 2)

* แก้ไข 2: ไม่มีข้อผิดพลาดในบันทึกด้วยงานใหม่นี้:

 */2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1

น่าเสียดายที่พยายามทั้งหมดข้างต้น แต่ไม่ได้ผลสำหรับฉัน ตามที่คุณบอกว่าการทดลอง / bin / sh -c "(ส่งออก PATH = / bin; /tmp/trial.sh </ dev / null)" แสดงข้อความด้านล่างไม่แน่ใจว่ามันคืออะไร / bin / sh: PATH = / bin : ไม่ใช่ตัวระบุ

คำตอบ:


73

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

  1. ประการแรก/path_to_my_php_script/info.phpทำงานอย่างถูกต้องจากบรรทัดคำสั่งหรือไม่

  2. ถ้าเป็นเช่นนั้นมันจะทำงานอย่างถูกต้องเช่นนี้หรือไม่:

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
    
  3. หากใช้งานได้จะทำงานเช่นนี้หรือไม่

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null >/dev/null 2>&1)"
    

ขั้นตอน (3) คล้ายกับวิธี cron จะเรียกใช้โปรแกรมของคุณ (ดังที่บันทึกไว้ใน "man 5 cron"

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

PATH=~/bin:/usr/bin/:/bin

โปรดทราบด้วยว่า cron จะใช้งานเป็นค่าเริ่มต้น/bin/shไม่ใช่การทุบตี หากคุณต้องการทุบตีเพิ่มสิ่งนี้ลงในจุดเริ่มต้นของไฟล์ crontab ของคุณ:

SHELL=/bin/bash

ทราบว่าการเปลี่ยนแปลงทั้งเหล่านั้นจะส่งผลกระทบต่อทุกรายการ crontab หากคุณต้องการแก้ไขค่าเหล่านี้สำหรับinfo.phpโปรแกรมของคุณคุณสามารถทำสิ่งนี้:

*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"

นอกจากนี้ยังมีมูลค่าการกล่าวขวัญว่าในระบบที่กำหนดค่าไว้สำหรับ "mail" (อีกนัยหนึ่งคือระบบที่มี MTA ที่กำหนดค่าไว้ [sendmail / postfix / etc]) เอาต์พุตทั้งหมดจากโปรแกรม crontab จะส่งถึงคุณทางอีเมลโดยอัตโนมัติ ระบบเดสก์ท็อปเริ่มต้นของ Ubuntu จะไม่มีการกำหนดค่าเมลในเครื่อง แต่ถ้าคุณกำลังทำงานบนเซิร์ฟเวอร์คุณสามารถพิมพ์ "mail" ในเทอร์มินัลเพื่อดูอีเมล cron ทั้งหมด นอกจากนี้ยังใช้กับatคำสั่ง ""


2
ฉันได้รับอนุญาตปฏิเสธขั้นตอนที่ 2 ฉันควรทำอย่างไร?
akikara

@akikara chmod + x ./cron.sh - ชัดแทนที่ ./cron.sh กับสิ่งที่สถานที่ตั้งของไฟล์ของคุณคือการที่คุณกำลังพยายามที่จะเรียกใช้
Tisch

46

แม้ว่าบางครั้ง cron จะหยุดทำงานอย่างถูกต้องแม้ว่าบริการจะทำงานอยู่ก็ตาม นี่คือวิธีการตรวจสอบว่า crond กำลังทำงานและหยุด / เริ่มบริการ

บน Linux:

service crond status
service crond stop
service crond start

บน Ubuntu และระบบที่ใช้เดเบียนอื่น ๆ :

service cron status
service cron stop
service cron start

13
แค่ทราบ ... สำหรับ Ubuntu มันcronไม่ใช่crond
Amit Kohli

32

ห้ามเปลี่ยนทิศทางเอาต์พุตข้อผิดพลาดเป็น / dev / null และ grep / var / log / syslog สำหรับเอาต์พุต cron

grep cron /var/log/syslog

คุณสามารถแสดงข้อผิดพลาดทันทีเมื่อบันทึกไฟล์หลังจากแก้ไข/etc/crontabหรือไฟล์ภายใน/etc/cron.d/ด้วย:

tail -f /var/log/syslog | grep --line-buffered cron

หากการแก้ไขไม่เป็นไรคุณจะเห็นการRELOADแจ้งเตือนเท่านั้นข้อผิดพลาดจะเกิดขึ้นเช่น

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new 

18

คุณสามารถดู cron ที่ใช้งานของคุณด้วยคำสั่ง terminal:

crontab -l

นี่คือพารามิเตอร์ในการสั่งซื้อ:

  1. ขั้นต่ำ (0 - 59)

  2. ชั่วโมง (0 - 23)

  3. วันของเดือน (1 - 31)

  4. เดือน (1 - 12)

  5. วันในสัปดาห์ (0 - 6) (วันอาทิตย์ = 0)

  6. คำสั่ง

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

* * * * * <command> #Runs every minute

สิ่งนี้จะเรียกว่าทุกนาที!


* / 2 * * * * ฉันเปลี่ยนเป็นทุกสองนาทีแล้ว
croppio.com


2

ฉันเชื่อว่าคุณสามารถใช้run-partsเพื่อเรียกใช้งาน cron จากนอกวง จริงๆแล้วมันเป็นสิ่งที่ cron ใช้ตัวเองเพื่อเรียกใช้งาน cron เป็นระยะดังนั้นโดยการจัดหาอาร์กิวเมนต์ที่เหมาะสมที่คุณสามารถเรียกใช้งานได้ตลอดเวลา

หากคุณเพียงแค่ต้องการเรียกใช้ไฟล์เดียวแทนงาน cron ทั้งหมดที่กำหนดไว้ในเช่น/etc/cron.dailyคุณจะต้องจัดหาอาร์กิวเมนต์ regex พร้อมกับ regex ที่ถูกต้องrun-parts --list --regex '^p.*d$' /etc

โปรดจำไว้ว่างาน cron มักจะตั้งชื่อโดยไม่มีส่วนขยายและทำเครื่องหมายว่าสามารถใช้งานได้ดังนั้นให้แน่ใจว่าสคริปต์ของคุณคล้ายกัน แต่การใช้ regex อาจทำให้คุณสามารถเรียกสคริปต์ด้วยส่วนขยายได้


1

อ่า !!

ได้คำตอบด้วยตัวเองฉันตรวจสอบและไม่พบcrondในไดเรกทอรีการติดตั้งเริ่มต้นเช่น/etc/init.d/

จะลองและตอบกลับ

หมายเหตุ - ผมไม่ตรวจสอบcron.allow, cron.denyเกินไป ทุกอย่างเรียบร้อยดี

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