Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

วิธีกำหนดเวลางาน Cron ใน Ruby ด้วยอัญมณีทุกครั้ง

Cron คืออะไร

Cron คือระบบจัดตารางงานที่มีอยู่ในระบบปฏิบัติการ Linux และ MacOS

สามารถใช้เพื่อเรียกใช้โปรแกรมใดก็ได้ เมื่อใดก็ได้

รวมถึงรหัสทับทิม!

หากมีงานที่เกิดซ้ำ ที่คุณต้องการให้ทำงานโดยอัตโนมัติทุกวัน ทุกสัปดาห์หรือทุกชั่วโมง ดังนั้น Cron อาจเป็นสิ่งที่คุณกำลังมองหา

ตัวอย่างงาน ได้แก่ :

  • เรียกใช้การสำรองข้อมูลฐานข้อมูลรายสัปดาห์
  • สร้างรายงานประจำวันของกิจกรรมเว็บไซต์
  • ส่งอีเมลเตือนความจำ

มาค้นพบวิธีทำให้ cron ทำงานแทนคุณ!

พื้นฐานของครอน

ผู้ใช้ทุกคนสามารถมีไฟล์ cron ที่คุณกำหนดงานที่คุณต้องการรันได้

คุณสามารถแก้ไขไฟล์นี้ด้วย crontab -e คำสั่ง

หรือรายการงานที่กำหนดเวลาไว้ด้วย crontab -l .

ตัวอย่างงาน cron :

0 0 * * * /opt/rubies/ruby-2.5.1/bin/rake db:backup

ไวยากรณ์อาจดูยุ่งยากเล็กน้อย และคุณอาจไม่ต้องการแก้ไขไฟล์เหล่านี้ด้วยมือตลอดเวลา

มีอัญมณีอะไรที่ทำให้เราง่ายขึ้นไหม

ใช่!

วิธีใช้อัญมณีเมื่อไร

เนื่องจากไวยากรณ์ cron นั้นจำยาก เราจึงสามารถใช้ gem ได้ เช่น whenever .

อัญมณีนี้ช่วยคุณ กำหนดงาน cron ใน Ruby .

ติดตั้งอัญมณีก่อน

จากนั้น สร้างไฟล์การกำหนดค่า :

wheneverize .
# [add] config/schedule.rb

เปิดเลย

คุณจะเห็นตัวอย่างความคิดเห็น ลบออกหากต้องการ

สมมติว่าเราต้องการงานสำรองที่ทำงานทุกชั่วโมง

เขียนสิ่งนี้ไว้ในไฟล์ “config/schedule.rb” :

every 1.hour do
  rake "db:backup"
end

ตัวเลือกประกอบด้วย :

  • rake (เริ่มงาน rake ที่กำหนดไว้ในโปรเจ็กต์ปัจจุบันของคุณ โปรดทราบว่า db:backup ไม่ได้ถูกกำหนดโดยค่าเริ่มต้น แต่คุณสามารถลองใช้ db:version )
  • รันเนอร์ (คลาส Ruby + เมธอด เช่น Archive.backup_now )
  • คำสั่ง (คำสั่งระบบ)

ตอนนี้ :

เรียกใช้ whenever --update-crontab คำสั่งสร้างรายการ cron

คุณควรจะเห็นรายการใหม่ของคุณด้วย crontab -l .

นี่คือสิ่งที่ฉันได้รับ :

0 * * * * /bin/bash -l -c 'cd /home/jesus/testing && RAILS_ENV=production bundle exec rake db:backup --silent'

สังเกตว่างานจะทำงานใน production โหมด

ต้องการเปลี่ยนสิ่งนั้นหรือไม่

คุณสามารถใช้การตั้งค่านี้ :

set :environment, "development"

สิ่งนี้ไปใน schedule.rb . ของคุณ ที่ด้านบนสุด

คุณยังสามารถใช้คำสั่งนี้ได้ :

whenever --update-crontab --set environment=development

สิ่งนี้จะสร้างงานทั้งหมดที่มี “การพัฒนา” เป็นสภาพแวดล้อมเมื่อคุณเรียกใช้คำสั่งนี้

ตัวอย่างเพิ่มเติมเมื่อไร

ตัวอย่างนี้แสดงให้เห็นว่าคุณจะเจาะจงมากขึ้นได้อย่างไร

งานประจำสัปดาห์ :

every :monday, at: "6:00 PM" do
  runner "Mail.send_weekly_newsletter"
end

ตัวอย่างนี้แสดงวิธีการเรียกใช้งานเดียวกันหลายครั้งในระหว่างวัน

เรียกใช้งานวันละสองครั้ง :

every :day, at: ["12:00 AM", "12:00 PM"] do
  command "rm tmp/testing.txt"
end

ทุกครั้งที่มีการบันทึกและแก้ไขปัญหาอัญมณี

เมื่อคุณมีงานในไฟล์ crontab แล้ว (ตรวจสอบด้วย crontab -l ) คุณพร้อมแล้ว

ถัดไป:

คุณจะทราบได้อย่างไรว่างานที่กำหนดเวลาไว้ทำงานถูกต้องหรือไม่

คุณสามารถตั้งค่าการบันทึกและอ่านผลลัพธ์ได้

เปิดใช้งานการบันทึกโดยเพิ่มสิ่งนี้ที่ด้านบนของ schedule.rb . ของคุณ ไฟล์.

การกำหนดค่า :

set :output, "log/cron.log"

อย่าลืมเรียกใช้ whenever --update-crontab สั่งทุกครั้งที่คุณทำการเปลี่ยนแปลง!

ไฟล์บันทึกยังว่างอยู่หรือไม่

คุณจะต้องรอเวลาที่กำหนดจึงจะเห็นบางอย่างเกิดขึ้น

แต่หากคุณเห็นข้อผิดพลาดนี้ในบันทึก :

/bin/bash: bundle: command not found

นั่นหมายความว่า cron ไม่ได้ใช้งาน Ruby เวอร์ชันเดียวกับที่คุณเป็นอยู่

หากคุณใช้โปรแกรมจัดการเวอร์ชัน Ruby :

อย่าลืมโหลดจาก .bash_profile ไฟล์แทน .bashrc เพื่อให้งาน cron ของคุณสามารถใช้งานได้

ทางเลือกอื่นเมื่อใดก็ได้

เมื่อใดก็ตามที่เป็นอัญมณีที่ได้รับการดูแลอย่างดีและใช้งานได้ดี

แต่ทางเลือกคืออะไร?

นี่คือรายการ :

  • Heroku Scheduler เป็นส่วนเสริมการจัดตารางงานฟรีสำหรับผู้ใช้ Heroku ไม่ยืดหยุ่นเท่า cron แต่ทำสิ่งต่างๆ ได้สำเร็จ
  • Rufus Scheduler อัญมณีทับทิมที่แทนที่ cron ด้วยตัวกำหนดเวลาในหน่วยความจำ
  • Sidecloq &Sidekiq-cron ทั้งสองเป็นส่วนเสริม Sidekiq ที่เพิ่มงานที่เกิดซ้ำใน Sidekiq

โปรดทราบว่าส่วนเสริม Sidekiq ทั้งสองต้องการไวยากรณ์ cron จริงสำหรับการตั้งเวลา ดังนั้นจึงไม่ดีเท่าไวยากรณ์ทุกครั้ง

ข้อดีคือรวมเข้ากับ UI เว็บ Sidekiq

สรุป

คุณได้เรียนรู้วิธีการกำหนดเวลางาน cron โดยใช้อัญมณีเมื่อไรก็ได้ใน Ruby!

โปรดแชร์บทความนี้เพื่อให้ผู้คนได้รับประโยชน์มากขึ้น

ขอบคุณสำหรับการอ่าน