ในการพัฒนาเว็บแอปพลิเคชันยุคใหม่ การจัดการงานที่ใช้เวลานาน เช่น การส่งอีเมล การประมลผลวิดีโอ หรือการดึงข้อมูลจาก API ภายนอก เรามักจากจะใช้ระบบคิว (Queue) เข้ามาช่วยเพื่อให้ผู้ใช้งานไม่ต้องรอผลลัพธ์นานเกินไป แต่ปัจจัยสำคัญคือการทำให้ Worker รับงานได้ตลอดภายใต้การควบคุมของ Supervisor ครับ
ทำไมต้องมี Supervisor?
บนระบบ Production เราไม่สามารถมาคอยรันคำสั่งด้วยมือได้ตลอดเวลา Supervisor จึงเข้ามาทำหฑ้าที่เป็นผู้เฝ้าดู (Monitor) และสั่ง Restart งานให้เราทันทีเมื่อเกิดปัญหาเพื่อให้ระบบคิวทำงานได้อย่างต่อเนื่องครับ
1. การติดตั้ง Supervisor
เราสามารถติดตั้ง Supervisor บน Ubuntu หรือ Debian ได้ง่าย ๆ
sudo apt update
sudo apt install supervisor
2. การติดตั้ง Configuration
ไฟล์คอนฟิกจะถิกเก็บไว้ใน /etc/supervisor/conf.d/ โดยเราต้องสร้างไฟล์ใหม่ เช่น laravel-worker.conf:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=8
redirect_stderr=true
stdout_logfile=/var/www/html/storage/logs/worker.log
stopwaitsecs=3600
3. การสั่งงานและจัดการ
หลังจากบันทึกไฟล์แล้ว ใช้คำสั่งเหล่านี่เพื่อเริ่มงาน
# สแกนหาไฟล์คอนฟิกใหม่ ๆ
sudo supervisorctl reread
# อัปเดตและเริ่มรันตามคอนฟิกใหม่
sudo supervisorctl update
# ตรวจสอบสถานาการทำงาน
sudo supervisorctl status
สรุป
การใช้ Supervisor เป็นแนวบางปฏิบัติมาตรฐาน (Best Practice) สำหรับการรันงานเบื่องหลังในระบบ PHP ที่ต้องการความเสถียรสูง ช่วยลดความเสี่ยงที่งานในคิวจากค้างสะสมและช่วยให้นักพัฒนาสามารถติดตามการทำงานได้อย่างเป็นระบบครับ
อ่านเพิ่มเติม