Cron คืออะไร? — Job Scheduling System ใน Linux และ MacOS
Run โปรแกรมไหนก็ได้ เวลาไหนก็ได้ — รวม Ruby Code!
ถ้ามี Recurring Task อยากรัน Auto ทุกวัน ทุกสัปดาห์ ทุกชั่วโมง — Cron คือคำตอบ
Task Examples:
- Weekly Database Backup
- Daily Website Activity Report
- ส่ง Reminder Emails
มาค้นหาวิธีให้ Cron ทำงานให้คุณ!
Basics Of Cron
ทุก User มี Cron File ใส่ Tasks — Edit: crontab -e, List: crontab -l
Example Cron Job:
0 0 * * * /opt/rubies/ruby-2.5.1/bin/rake db:backup
Syntax ยากจำ อาจไม่อยาก Edit เองตลอด — มี Gems ทำง่ายขึ้นไหม? มี!
วิธีใช้ Whenever Gem
Cron Syntax ยากจำ -> 用 whenever Gem
Gem นี้ Define Cron Jobs ใน Ruby
Install Gem ก่อน — สร้าง Config File:
wheneverize . # [add] config/schedule.rb
เปิดมา — มี Examples Commented Out ลบได้
อยาก Backup Job รันทุกชั่วโมง — เขียนใน config/schedule.rb:
every 1.hour do rake "db:backup" end
Options:
- rake (Rake Task ในโปรเจกต์,
db:backupไม่ Default แตลองdb:version) - runner (Ruby Class + Method, เช่น
Archive.backup_now) - command (System Command)
ตอนนี้: รัน whenever --update-crontab Generate Cron Entries — crontab -l ดูได้
ได้แบบนี้:
0 * * * * /bin/bash -l -c 'cd /home/jesus/testing && RAILS_ENV=production bundle exec rake db:backup --silent'
Task รันใน production Mode — อยากเปลี่ยน? Setting นี้: set :environment, "development" (ใน schedule.rb บนสุด) หรือ Command: whenever --update-crontab --set environment=development
Whenever Examples เพิ่มเติม
ตัวอย่าง Specific — Weekly Task:
every :monday, at: "6:00 PM" do runner "Mail.send_weekly_newsletter" end
รัน Task หลายครั้งในวัน — Twice a Day:
every :day, at: ["12:00 AM", "12:00 PM"] do command "rm tmp/testing.txt" end
Whenever Gem Logging & Troubleshooting
มี Tasks ใน Crontab (crontab -l) Ready — รู้ยังไงว่า Tasks ทำงานถูก?
Setup Logging อ่าน Output — Enable Logging ใส่บนสุด schedule.rb:
set :output, "log/cron.log"
記得 รัน whenever --update-crontab ทุกครั้งที่แก้!
Log ว่าง? รอ Scheduled Time — Btw Error นี้ใน Logs: /bin/bash: bundle: command not found = Cron รัน Ruby Version ต่างจากคุณ
用 Ruby Version Manager: โหลดจาก .bash_profile ไม่ใช่ .bashrc ให้ Cron Tasks ใช้ได้
Alternatives to Whenever
Whenever Maintained ใช้งานดี — แต Alternatives?
List:
- Heroku Scheduler: Free Add-on สำหรับ Heroku Users ไม่ยืดหยุ่นเท่า Cron แตทำงานได้
- Rufus Scheduler: Gem แทน Cron ด้วย In-Memory Scheduler
- Sidecloq & Sidekiq-cron: Sidekiq Add-ons 加 Recurring Tasks ให้ Sidekiq
Sidekiq Addons อยาก Cron Syntax จริง — ไม่สวยเท่า Whenever — แต Integrate กับ Sidekiq Web UI
Summary (สรุป)
คุณเรียนรู้ Schedule Cron Jobs ด้วย Whenever Gem ใน Ruby!
Share บทความให้คนอื่นได้ประโยชน์ — ขอบคุณที่อ่านครับ