Supervisor là gì?
Supervisor là công cụ giúp quản lý các tiến trình chạy trên Linux. Một số ưu điểm mà Supervisor như:
-
Đảm bảo một tiến trình nào đó luôn luôn chạy không ngừng nghỉ. Nếu vì lý do gì mà nó bị tắt, Supervisor sẽ khởi động process đó lại.
-
Tự động chạy một tiến trình khi khởi động hệ thống.
-
Quản lý nhiều tiến trình dưới dạng một group các tiến trình , có thể được bật/tắt cùng lúc.
-
Log được lại quá trình chạy Queue Job.
-
Trong trường hợp tiến trình mà supervisor thực thi phát sinh lỗi, có thể cấu hình để Supervisor retry lại một số lần nhất định trước khi chính thức báo fail.
Mỗi tiến trình do Supervisor giám sát sẽ được cấu hình ở file dạng .conf nằm trong thư mục /etc/supervisor/conf.d
Cấu trúc 1 file config cơ bản như sau:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
directory=/path/to/your/project
command=sendmail.sh
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/path/to/your/project/logs/worker.log
-
[program: tên-bất-kì]: tên program. Mọi người có thể đặt tên bất kỳ gì.
-
directory: đường dẫn tới program cần run.
-
command: program muốn run.
-
autostart: quy định tiến trình có tự chạy ngay khi Supervisor được khởi động hay ko. Thường thì Supervisor được chạy khi boot, nên việc quy định tiến trình có tự chạy hay không sẽ phụ thuộc vào boot.
-
autorestart: quy định tiến trình có tự khởi động ngay sau khi nó bị tắt vì lý do nào đó (đã chạy xong, bị lỗi, bị timeout…) hay ko.
-
user: user dùng để thực thi tiến trình.
-
numprocs: số lượng tiến trình mà Supervisor sẽ chạy. Ví dụ để gửi mail, ta để numprocs=4, nghĩa là 4 tiến trình cùng chạy task gửi mail.
-
redirect_stderr: nếu là true thì stderr sẽ bị redirect để xuất vào file chỉ định ở stdout_logfile
-
stdout_logfile: đường dẫn tới file log của mình. File này ko cần tạo trước vì supervisor sẽ tự tạo cho mình
systemctl restart supervisord
# or
sudo service supervisor restart
Note: Mỗi khi thay đổi các thông tin cấu hình Supervisor, mọi người cần phải khởi động lại Supervisor nhé.
Thực thi Supervisor để chạy Laravel Queue
-
Tạo file laravel-worker.conf trong thư mục /etc/supervisor/conf.d và sửa file
Một số command thường dùng
| Command | Detail |
| sudo service supervisor restart | Khởi động lại toàn bộ supervisor |
| sudo supervisorctl start laravel-worker:* | Khởi động worker laravel-worker:* |
| sudo supervisorctl stop laravel-worker:* | Dừng worker laravel-worker:* |
| sudo supervisorctl restart laravel-worker:* | Khởi động lại worker laravel-worker:* |