ป้ายกำกับ: tries

PHP: การใช้ Supervisor สำหรับควบคุมคิวงาน (Queue Workers) ให้ทำงานตลอดเวลาPHP: การใช้ Supervisor สำหรับควบคุมคิวงาน (Queue Workers) ให้ทำงานตลอดเวลา

ในการพัฒนาเว็บแอปพลิเคชันยุคใหม่ การจัดการงานที่ใช้เวลานาน เช่น การส่งอีเมล การประมลผลวิดีโอ หรือการดึงข้อมูลจาก 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 ที่ต้องการความเสถียรสูง ช่วยลดความเสี่ยงที่งานในคิวจากค้างสะสมและช่วยให้นักพัฒนาสามารถติดตามการทำงานได้อย่างเป็นระบบครับ


อ่านเพิ่มเติม