Cài đặt Supervisor cho Laravel Queue
Supervisor là một công cụ giám sát process tuyệt vời, đặc biệt hữu ích khi làm việc với Laravel Queue. Laravel Queue cho phép xử lý nhiều tác vụ cùng lúc dưới nền, giúp giảm thời gian xử lý và cải thiện cấu trúc mã. Tuy nhiên, Laravel Queue có thể ngừng hoạt động khi gặp lỗi hoặc không tự khởi động lại sau các thay đổi trong ứng dụng. Đây chính là lúc Supervisor trở thành giải pháp để giám sát và tự động khởi động lại các process khi cần thiết.
Cài đặt Supervisor
Để cài đặt Supervisor trên Ubuntu, sử dụng lệnh:
sudo apt install supervisor
Nếu bạn sử dụng CentOS, cần cài đặt epel-release trước:
sudo yum install epel-release
Trên CentOS chạy trên Amazon EC2, bạn sẽ cần cài đặt epel-release thông qua Amazon Linux Extras:
sudo amazon-linux-extras install epel
Trên Windows, Supervisor có thể được cài đặt qua pip:
pip install supervisor
Cấu hình Supervisor
Thông thường, file cấu hình chính của Supervisor sẽ nằm tại /etc/supervisord.conf. Nếu file này chưa tồn tại, bạn có thể tạo mới với cấu hình mặc định bằng lệnh:
echo_supervisord_conf > /etc/supervisord.conf
Bên trong file cấu hình, phần include ở cuối cho phép bạn tách cấu hình thành nhiều file riêng biệt:
[include]
files = supervisord.d/*.ini
Tiếp theo, tạo file laravel-worker.ini trong thư mục supervisord.d với nội dung sau:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php /var/www/html/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=root
numprocs=3
redirect_stderr=true
stdout_logfile=/var/www/html/storage/logs/queue.log
stopwaitsecs=3600
Trong đó:
- numprocs=3: Supervisor sẽ chạy và giám sát 3 process
queue:work, tự động khởi động lại nếu có lỗi. - command: Đảm bảo chỉ định đúng đường dẫn đến file artisan trong thư mục dự án của bạn.
- stdout_logfile: Chỉ định nơi lưu log file.
Để biết thêm chi tiết về các cấu hình, bạn có thể tham khảo tài liệu chính thức của Supervisor.
Sau khi cấu hình, khởi động các process với các lệnh:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
Nếu gặp lỗi như sau:
error: <class 'socket.error'>, [Errno 2] No such file or directory: file: /usr/lib64/python2.7/socket.py line: 228
Điều này có nghĩa là Supervisor chưa được khởi động. Chạy lệnh sau để khởi động lại Supervisor:
sudo service supervisord restart
Kiểm tra trạng thái của các process với lệnh:
sudo supervisorctl status
Nếu kết quả hiển thị như dưới đây, Supervisor đã hoạt động thành công:
laravel-worker:laravel-worker_00 RUNNING pid 1233, uptime 0:00:30
laravel-worker:laravel-worker_01 RUNNING pid 1234, uptime 0:00:30
laravel-worker:laravel-worker_02 RUNNING pid 1235, uptime 0:00:30
Cài đặt Redis cho Laravel Queue
Để sử dụng Redis làm Queue Driver cho Laravel, bạn có thể cài đặt Redis trên Ubuntu với lệnh:
sudo apt install redis-server
Trên CentOS, cần cài đặt epel-release trước khi cài Redis:
sudo yum install epel-release
sudo yum install redis
Khởi động Redis sau khi cài đặt thành công:
sudo systemctl start redis.service
Để Redis khởi động cùng hệ thống:
sudo systemctl enable redis-server
Để sử dụng Redis làm Queue Driver cho Laravel, mở file .env và chỉnh sửa như sau:
QUEUE_CONNECTION=redis
Nếu gặp lỗi sau khi sử dụng Redis:
Class 'Predis\Client' not found
Bạn cần cài đặt thư viện predis/predis bằng Composer:
composer require predis/predis
Với các bước trên, Supervisor sẽ giúp bạn giám sát và tự động khởi động lại các process của Laravel Queue, đảm bảo hệ thống luôn hoạt động ổn định và hiệu quả.