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!
โปรดแชร์บทความนี้เพื่อให้ผู้คนได้รับประโยชน์มากขึ้น
ขอบคุณสำหรับการอ่าน