เทคนิคในการตรวจสอบงาน cron?


22

มีเทคนิคที่ดีสำหรับการตรวจสอบงาน cron บนคลัสเตอร์หรือไม่?

เราเริ่มใช้ cron เพื่อเริ่มงานทุกวัน แนวคิดบางประการสำหรับการตรวจสอบข้อมูล:

  1. เพิ่มการจัดการแอปพลิเคชันพิเศษที่บันทึกข้อมูลลงในสถานที่ "เครือข่ายที่รับรู้" เช่น DB
  2. สร้างระบบ logfile ที่ถ่ายโอนบันทึก cron เป็นระยะ ๆ ไปยังจุดศูนย์กลางสำหรับการประมวลผล / การสืบค้น (พร้อมกับไฟล์บันทึกอื่น ๆ ที่เป็นไปได้)

ฉันสงสัยว่าผู้คนประสบความสำเร็จในการทำสิ่งต่าง ๆ เพื่อ cron กับสิ่งอื่น ๆ หรือไม่หรือถ้างานนั้นถูกรวมเข้ากับแนวทางที่แตกต่างอย่างสิ้นเชิง ฉันเอนตัวไปทาง # 2 แต่ฉันอยากจะรู้ว่าชาวบ้านที่มีประสบการณ์มากกว่านี้อาจลอง


เป็นความกังวลของคุณที่ cronjobs ไม่ทำงาน? หรือคุณกำลังขอให้ตรวจสอบ 'สถานะ' สำหรับการทำงาน?
ericslaw

1
ส่วนใหญ่พวกเขาไม่ได้ล้มเหลว แต่งานบางอย่างใช้เวลานานและเราอาจต้องการคว้าข้อมูลเช่น "อุ๊ปส์นี่ใช้เวลานานเกินไป"
Tristan Juricek

คำตอบ:


16

นอกจากคำตอบอื่น ๆ :

  • ปล่อยให้งานเขียนการประทับเวลาลงในไฟล์เมื่อเสร็จสิ้นพร้อมกับค่าส่งคืนจากงานจริง
  • เผยแพร่ค่าส่งคืนกลับไปยังผู้โทรเดิม

เราใช้วิธีแรกเพื่อทำให้ง่ายขึ้นสำหรับNagios ( Icinga ) ในการตรวจสอบเช่นหากการบันทึกเวลาล่าสุดที่เขียนนั้นเก่ากว่า n ชั่วโมง (รวมถึงตรรกะที่คุณต้องการ) - เรารู้ว่ามีบางอย่างผิดปกติ


ในขณะที่ฉันชอบคำตอบของทุกคน - ฉันเรียนรู้มาก - ฉันลืมเรื่องการติดตาม Nagios ของเราอย่างสมบูรณ์ นี่เป็นสิ่งที่ยอดเยี่ยมสำหรับงานที่ต้องทำนาน ๆ สิ่งที่ฉันกังวลจริงๆ ขอบคุณ
39327 Tristan Juricek

16

วิธีการทั่วไปของฉันคือ:

  • อย่าสร้าง stdout ใด ๆ เมื่อแอปพลิเคชัน cron'ed ของคุณเสร็จสมบูรณ์
  • อย่าไพพ์เอาต์พุตใด ๆ ไปยัง / dev / null
  • สร้างเอาต์พุต stderr ที่มีความหมายเมื่อเกิดข้อผิดพลาด
  • อย่าตั้งค่าที่อยู่ $ MAILTO ใน crontab เพื่อส่งข้อผิดพลาดนั้นไปยังทีมที่ต้องการ

และถ้าใครมีไปป์เอาท์พุทจริง ๆ ให้/dev/nullเพิ่มอย่างน้อย|| echo "service $service is FUBAR"ในบรรทัดคำสั่ง ...
Hubert Kario

4

นอกเหนือจากด้านบน:

  • อย่าเรียก "คนตัดไม้" พร้อมกับเขียนถึง stderr เมื่อมีบางอย่างผิดปกติ กำหนดค่า syslog เพื่อส่งต่อไปยังโฮสต์กลางหรือที่รู้จักในชื่อ "loghost" (ตัวบันทึกจะใช้สิ่งอำนวยความสะดวก "user.notice" เป็นค่าเริ่มต้น แต่คุณสามารถเปลี่ยนแปลงได้)

1
ฉันชอบความคิดนี้ .... แม้ว่า crond จะล็อก syslog แล้ว (อาจผ่านการตั้งค่าพารามิเตอร์) ดังนั้นการใช้ตัวบันทึกจึงไม่จำเป็นสำหรับวิธีการนี้อย่างเคร่งครัด
ericslaw

4

มีเทคนิคสองสามข้อที่คุณสามารถใช้สำหรับตรวจสอบ cronjobs

ในการรับการแจ้งเตือนของ cronjob ที่ล้มเหลว:

  • ใช้ฟังก์ชัน MAILTO = มาตรฐานของ cron หาก cronjob สร้างเอาต์พุตบน STDERR มันจะถูกส่งไปยังที่อยู่ที่คุณเลือก
  • ในการติดตามและจัดการกับอีเมล cron คุณสามารถนำพวกเขาไปสู่ระบบตั๋ว

ระบบที่คุณเสนอให้บันทึกข้อมูลลงในเครือข่าย "ตระหนัก" เสียงสถานที่เช่นsyslog syslog มีวิธีง่าย ๆ ในการสร้างบันทึกโดยปกติจะจัดการไฟล์เช่น / var / log / Messages คุณสามารถปรับแต่งพื้นฐานเช่นการเลือกไฟล์ที่ได้รับข้อความบันทึก

Syslog สามารถเริ่มทำงานในโหมดเครือข่ายที่รับรู้ได้ ตัวอย่างเช่นคุณสามารถกำหนดค่าเพื่อให้ทาสสามารถเข้าสู่ระบบหลัก:

[root@slave ~]#  echo "hello world from slave" | logger -p local1.info

[root@master ~]# tail /var/log/myapp
Jun 29 13:07:01 192.168.1.2 logger: hello world from slave

สำหรับการแจกจ่ายแบบ Red Hat การกำหนดค่าตัวอย่างมีดังนี้:

[root@slave ~]# cat /etc/syslog.conf | grep local1
local1.*                                                @192.168.1.3

[root@master ~]# cat /etc/sysconfig/syslog | grep SYSLOGD_OPTIONS
SYSLOGD_OPTIONS="-m 0 -r"

[root@master ~]# cat /etc/syslog.conf | grep local
local1.* /var/log/myapp

(บรรทัด config แรกเปลี่ยนเส้นทาง local1. * บันทึกประกาศไปที่ @ 192.168.1.3 ("master") แฟล็ก -r ของบรรทัด SYSLOGD_OPIONS บรรทัดที่สองเปิดใช้งานการสนับสนุนเครือข่ายสุดท้ายบรรทัด config ที่สามจะนำ local1. * ข้อความที่ได้รับบน "master" เป็นไฟล์)

วิธี syslog นั้นดีกว่าสำหรับการบันทึกข้อผิดพลาด / ข้อมูลเท่านั้น ไฟล์บันทึกมีการเปิดเผยน้อยกว่าอีเมลดังนั้นคุณอาจไม่ได้ดูไฟล์บันทึกเลยเว้นแต่มีบางอย่างผิดปกติ

หากคุณเลือกที่จะไปตามเส้นทางลักษณะ syslog ให้พิจารณา syslog-ng: http://freshmeat.net/projects/syslog-ng/ด้วย

แน่นอนว่าคุณจะได้รับทั้งสองเทคนิคที่ดีที่สุดโดยใช้ทั้งสองอย่าง ตัวอย่างเช่น syslog'ing ทั้งความล้มเหลวและความสำเร็จและเพียงแค่ส่งจดหมายสำหรับความล้มเหลว


ขอบคุณสำหรับคำตอบ -> ฉันเป็นโปรแกรมเมอร์ซึ่งทำให้ฉันเป็นมือใหม่นิดหน่อย ฉันไม่ได้ตระหนักถึงความสามารถของเครือข่ายของ syslog
Tristan Juricek

3

ฉันโพสต์คำตอบที่คล้ายกันสำหรับคำถามใน StackOverflow ( /programming/21025495/system-for-monitoring-cron-jobs-and-automated-tasks )

Cronitor ( https://cronitor.io ) เป็นเครื่องมือที่ฉันสร้างขึ้นเพื่อวัตถุประสงค์นี้ โดยทั่วไปแล้วมันจะทำให้การติดตามเป็นสัญญาณเตือนที่ใช้คำขอ http เป็น Ping

อย่างไรก็ตามหนึ่งในความต้องการที่ OP กล่าวถึงในความคิดเห็นของเขาจำเป็นต้องได้รับการแจ้งเมื่องานเริ่มใช้เวลานานเกินไปที่จะเรียกใช้

ฉันมีความต้องการแบบเดียวกันนี้และพบว่าเครื่องมือที่คล้ายกันไม่สนับสนุนการตรวจสอบประเภทนี้ได้อย่างง่ายดาย Cronitor แก้ปัญหานี้โดยอนุญาตให้คุณเลือกที่จะเริ่มเหตุการณ์เริ่มต้นและเหตุการณ์สิ้นสุดเพื่อติดตามระยะเวลา

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


2

ก็ยังคงอยู่ภายใต้การพัฒนาค่อนข้างหนักในช่วงเวลาของผมเขียนนี้ แต่ผมขอแนะนำให้ไปดูที่https://github.com/jamesrwhite/minicron ได้รับการพัฒนาเพื่อแก้ไขปัญหาที่คุณอธิบาย ด้วยการปรับเปลี่ยนเล็กน้อยในคำสั่งที่คุณเรียกใช้สามารถบันทึกเอาท์พุทและสถานะการออกของงานและส่งข้อมูลนั้นกลับไปที่เซิร์ฟเวอร์กลางแบบเรียลไทม์และสามารถส่งการแจ้งเตือนผ่านอีเมล SMS และ PagerDuty เมื่องานล้มเหลว (สถานะออก> 0) หรือไม่ทำงานเมื่อควร

คำเตือน: ฉันเป็นนักพัฒนาที่ทำงานกับมัน


0

ลักษณะนี้เหมือนกรณีการใช้งานคลาสสิกสำหรับAlertGrid

ไม่จำเป็นต้องติดตั้งสิ่งที่คุณต้องทำเพื่อใช้ประโยชน์จากเครื่องมือนี้คือ:

  1. ส่งสัญญาณไปที่ AlertGrid ทุกครั้งที่งาน cron ของคุณเสร็จสิ้นการทำงาน (สามารถทำได้โดยใช้ API แบบธรรมดามากสัญญาณเป็นเพียงการร้องขอ HTTP) คุณสามารถส่งพารามิเตอร์บางอย่างเช่นexecution_time!
  2. ตั้งค่ากฎการแจ้งเตือนเช่น folllowing:

ถ้า my_job ไม่ตอบสนองใน X นาที (ชั่วโมงในกรณีของคุณ) -> ส่ง SMS ไปที่ผู้ดูแลระบบ

หรือ

if execution_time> 60 วินาที -> ส่งอีเมลไปยังผู้ที่สนใจ

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

หวังว่านี่จะช่วยใครซักคน มีบัญชีฟรีที่ให้ไว้เพื่อให้คุณสามารถทดสอบและใช้ AlertGrid หากคุณสนใจ ฉันเป็นหนึ่งในสมาชิกในทีม AlertGrid - อย่าลังเลที่จะถามว่าคุณมีคำถาม


0

งาน cron ของคุณถูกบันทึกผ่าน syslog แล้ว ข้อมูลนั้นสามารถส่งไปยังเซิร์ฟเวอร์กลางโดยใช้ syslogd ซึ่งเป็นบริการมาตรฐานอื่น

http://www.debuntu.org/how-to-remote-syslog-logging-on-debian-and-ubuntu/มีรายละเอียดเกี่ยวกับวิธีการตั้งค่านี้


0

ฉันใช้http://cronrat.comเพียงต่อท้าย && curl "... url cronrat ของคุณ" กับงาน cron ของคุณ คุณสมบัติที่ดีที่สุดที่ฉันชอบคือคุณไม่จำเป็นต้องตั้งค่าอะไรหลังจากที่คุณสร้างบัญชีเริ่มต้น การแจ้งเตือนแต่ละครั้งจะเริ่มขึ้นและทำงานในนาทีที่คุณใช้ ดังนั้นฉันสามารถใช้เครื่องมืออัตโนมัติใด ๆ เพื่อเริ่มงานของฉันที่ยังไม่มีอยู่ซึ่งแตกต่างจากบริการบางอย่างที่ฉันต้องตั้งค่างานก่อน


ฉันถูกปั๊มอ่านเกี่ยวกับ cronrat - ง่ายและฟรี Buuuuut ฉันหาวิธีลงทะเบียนไม่ได้ บริการนี้ตายหรือไม่
rinogo

0

ฉันได้สร้างPower Cronหลังจากความต้องการที่แม่นยำเหล่านี้ ฉันต้องการมุมมองแบบรวมศูนย์สำหรับงาน cron ของฉันและแนวคิดเรื่องการพึ่งพาระหว่างงานของสมาชิกคลัสเตอร์ที่แตกต่างกัน

ฉันต้องการข้อมูลมากกว่าสิ่งที่ฉันสามารถหาได้ในบันทึกและเพิ่มการสร้างโปรไฟล์งาน


0

เราสร้าง PushMon, http://www.pushmon.comสำหรับสิ่งนี้ สมมติว่างานประจำวันของคุณทำงานเวลา 3 น. และตามปกติจะสิ้นสุดเวลาตี 4 คุณสามารถตั้งค่ากำหนดการ PushMon เป็น "โดย 4:00 น. ทุกวัน" หรือกำหนดเวลาขั้นสูงเพิ่มเติมเล็กน้อยเช่น "ภายใน 4:00 น. ทุกวันภายใน 1 ชั่วโมง" สิ่งที่คุณต้องทำคือ "ping" URL ของ PushMon ทุกครั้งที่งานของคุณทำงานและมันจะแจ้งเตือนคุณถึงการส่ง Ping ที่หายไป หากคุณทราบว่ามีข้อผิดพลาดเกิดขึ้นเช่นเมื่อคุณตรวจพบข้อยกเว้นที่คุณไม่สามารถจัดการได้คุณสามารถใช้คุณสมบัติการแจ้งเตือนตามความต้องการ


0

Healthchecks ( https://github.com/healthchecks/healthchecks/ ) เป็นบริการและแดชบอร์ดที่สร้างขึ้นสำหรับการตรวจสอบงาน cron มันถูกใช้ในการผลิตถูกเก็บรักษาและยอมรับการสนับสนุนโค้ด

มันทำงานคล้าย ๆ กับ Cronitor Snitch และเพื่อนของ Dead Man: คุณตั้งค่างาน cron ของคุณเพื่อให้คำขอ HTTP / HTTPS เป็น URL พิเศษที่ไม่ซ้ำใครก่อนที่มันจะเสร็จสิ้น Healthchecks รับและบันทึกการ Ping เหล่านี้ มันตรวจสอบอย่างต่อเนื่องว่าส่ง Ping มาถึงตามช่วงเวลาที่คาดหวัง เมื่อตรวจพบปัญหาก็จะส่งการแจ้งเตือนให้คุณ วิธีการแจ้งเตือนที่รองรับคืออีเมล, webhooks, Slack, Telegram, Discord, SMS, Pushover, Pusbullet, PagerDuty, PagerTree, HipChat, VictorOps, OpsGenie

คุณสามารถตั้งค่าทั้งหมดนี้และโฮสต์ตัวเอง แต่เช่นเดียวกับบริการเว็บใด ๆ ก็ต้องใช้ความพยายามในการตั้งค่าชื่อโดเมน, ใบรับรอง, กำหนดค่าพร็อกซีย้อนกลับ HTTP, การตั้งค่าการสำรองฐานข้อมูลเป็นต้นวิธีที่ง่ายในการรับ การทำงานคือการใช้รุ่นนี้ Heroku ปรับ: https://github.com/iphoting/healthchecks ฉันรู้จักผู้ที่ดำเนินโครงการนี้ด้วยตนเองและใช้เพื่อตรวจสอบบริการหลายร้อยรายการ

ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้แต่งและฉันยังใช้ Healthcheck เป็นบริการโฮสต์ที่https://healthchecks.io

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