ฉันจะบอกได้อย่างไรว่างาน cron รายชั่วโมงของฉันทำงาน


26

ผมได้สร้างไฟล์ที่เรียกว่าntpdateใน/etc/cron.hourly

#!/bin/sh
/usr/sbin/ntpdate-debian
date > /tmp/william_tmp
date > /william_tmp
date > ~/william_tmp
echo test

ฉันทำ Chmod 755 กับไฟล์นี้ด้วย

อย่างไรก็ตามฉันไม่สามารถบอกได้ว่าไฟล์ทำงานหรือไม่!

ไฟล์ไม่ได้ถูกสร้างขึ้นใน 3 ไดเรกทอรีใด ๆ

หากฉันเรียกใช้ด้วยตนเองcd / && run-parts --report /etc/cron.hourlyไฟล์จะถูกสร้างขึ้นและฉันได้รับเสียงสะท้อน

ทุกคนสามารถแนะนำคำแนะนำ (อย่างเป็นขั้นเป็นตอน!) เพื่อทดสอบว่าใช้งานได้หรือไม่

คำตอบ:


25

ข้อผิดพลาดที่สำคัญอย่างหนึ่งต่อ cron คือ cron ทำงานในสภาพแวดล้อมที่มีข้อ จำกัด อย่างมากเนื่องจากตัวแปรจำนวนมากไม่ได้ถูกส่งออกไปยังสภาพแวดล้อมส่วนใหญ่จะเป็น $ PATH ตรวจสอบให้แน่ใจว่าคุณใช้เส้นทางที่แน่นอนทุกคนที่จะปฏิบัติการรวมทั้งฟังก์ชั่นที่เหมือนกันเช่นecho, uptime, dateฯลฯ จำเป็นทั้งหมดที่จะใช้เส้นทางที่เต็มรูปแบบ ( /bin/echo, /bin/date, /usr/bin/uptime) ในการกำหนดพา ธ ไปยังไฟล์ที่เรียกใช้งานได้คุณสามารถใช้whichคำสั่งดังนี้: which echo- นี่จะแสดงพา ธ แบบเต็มไปยังเครื่องมือนั้น


ตามที่กล่าวไว้ในการแชทขอบคุณสำหรับสิ่งนี้และฉันหวังว่ามันจะช่วยคนอื่น ... ในขณะที่ฉันทำเส้นทางตกสู่ ntpdate ฉันคุ้นเคยกับ Windows และ echo / date เป็นเพียง "สร้างขึ้นใน" ฉันไม่ได้ทำ ' ไม่คิดว่าฉันจะต้องการเส้นทางที่สมบูรณ์ ... เรียนรู้เพิ่มเติมเกี่ยวกับ Linux และมันสมเหตุสมผลดี
wilhil

36

คุณควรดูใน/var/log/syslogไฟล์บันทึกของคุณ หาก cron ทำงานมันจะมีลักษณะดังนี้:

Jun 11 19:09:01 penguin CRON[17376]: (root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
Jun 11 19:17:01 penguin CRON[17799]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

สำหรับเคล็ดลับการแก้ไขปัญหาโปรดดูที่https://help.ubuntu.com/community/CronHowto#Troubleshooting_and_Common_Problems


ไม่มีสิ่งใดใน Syslog และฉันไม่สามารถมองเห็นเหตุผลใด ๆ ว่าทำไมมันจะล้มเหลวจากลิงก์นั้น :(
wilhil

1
หากไม่มีรายการใน syslog ( grep -i cron /var/log/syslog /var/log/syslog.1) ให้เริ่มตรวจสอบว่า cron daemon กำลังทำงานอยู่หรือไม่: ps uww -C cronควรมีบรรทัดที่มีกระบวนการ
Lekensteyn

ขออภัยที่ทำให้เข้าใจผิดมีข้อตกลงสำหรับ Cron ใน syslog ไม่มีอะไรเกี่ยวข้องกับคำสั่งนี้ ... ฉันรู้ว่างานบางอย่างทำงานทุกชั่วโมงฉันได้รับจดหมายแจ้งเตือนใหม่ ... AFAIK คนที่ทำงานอยู่ จาก crontab มีอะไรใน cron.hourly ซึ่งเป็นสิ่งที่ฉันกำลังพยายามที่จะทำงาน
wilhil

2

ลองเปลี่ยนบรรทัดแรกของสคริปต์ (ตัวแปล) เป็น:

#!/bin/bash

ฉันเคยมีปัญหาในอดีตด้วยตัวแปรสภาพแวดล้อมและปัญหา PATH หลังจากเปลี่ยนล่ามเป็นbashปัญหาของฉันก็หายไป


1

ให้ฉันเพิ่มclearme.shสคริปต์ใน/etc/cron.hourly/

เพียงกรองงาน CRON ในเทอร์มินัลด้วยegrepและawkอันทรงพลัง:

$ cat /var/log/syslog | egrep clearme | awk "{ print $1 }" > ~/Desktop/cronlog.txt

ผลลัพธ์จะมีลักษณะดังนี้:

Jan 14 15:20:01 markets-dev CRON[10089]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 15:40:01 markets-dev CRON[18042]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:00:01 markets-dev CRON[22817]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:20:01 markets-dev CRON[28183]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:40:01 markets-dev CRON[411]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:00:01 markets-dev CRON[5442]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:20:01 markets-dev CRON[11935]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)

เพื่ออธิบายทุกอย่างทีละขั้นตอน:

  1. cat / var / log / syslog - พิมพ์บันทึกของระบบ
  2. egrep clearme - แต่เลือกแถวที่มีข้อความclearme เท่านั้น
  3. awk "{print $ 1}" - พิมพ์แถวนั้นที่มีข้อความที่ชัดเจน
  4. > ~ / Desktop / cronlog.txt - แสดงผลลัพธ์ในไฟล์cronlog.txt ที่อยู่ในไดเรกทอรีDesktop

ขั้นตอนที่ 4 เป็นทางเลือก มันจะพิมพ์ผลลัพธ์ในเทอร์มินัลแทนไฟล์

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