Trong môi trường VPS, bạn thường cần duy trì liên tục nhiều ứng dụng nhỏ, từ các script shell, ứng dụng Node.js đến các gói phần mềm quy mô lớn. Thông thường, các phần mềm bên ngoài được cung cấp kèm theo file đơn vị (unit file) để quản lý qua hệ thống init như systemd, hoặc được đóng gói dưới dạng Docker image để điều khiển bởi container engine. Tuy nhiên, với những phần mềm chưa được đóng gói tốt hoặc khi bạn muốn tránh tương tác trực tiếp với hệ thống init cấp thấp, một giải pháp nhẹ nhàng và tiện lợi sẽ rất cần thiết.
Supervisor chính là công cụ quản lý tiến trình giúp bạn giám sát và điều khiển nhiều chương trình chạy liên tục qua một giao diện duy nhất. Trong hướng dẫn này, bạn sẽ được chỉ dẫn cách cài đặt Supervisor trên máy chủ Linux và cấu hình nó để quản lý hiệu quả nhiều ứng dụng khác nhau, giúp việc quản trị trở nên đơn giản và trực quan hơn.
Yêu cầu tiên quyết
Để hoàn thành hướng dẫn này, bạn cần:
● Một máy chủ Linux và một tài khoản người dùng không phải root với quyền sudo. Bạn có thể tìm hiểu cách cài đặt tài khoản người dùng với các quyền này trong hướng dẫn “Cài đặt máy chủ ban đầu với Ubuntu 20.04”.
Bước 1 – Cài đặt
Bắt đầu bằng cách cập nhật nguồn gói và cài đặt Supervisor:
sudo apt update && sudo apt install supervisor
Dịch vụ supervisor sẽ tự động chạy sau khi cài đặt. Bạn có thể kiểm tra trạng thái của nó:
sudo systemctl status supervisor
Bạn sẽ nhận được output tương tự như sau:
output
Giờ bạn đã cài đặt Supervisor, chúng ta sẽ cùng thêm chương trình đầu tiên.
Bước 2 – Thêm chương trình
Một thực hành tốt khi làm việc với Supervisor là viết một tệp cấu hình cho mỗi chương trình mà nó quản lý.
Tất cả các chương trình chạy dưới Supervisor phải được chạy ở chế độ non-daemonising mode (còn gọi là “foreground mode”). Nếu chương trình của bạn theo mặc định tự động kết thúc sau khi chạy, bạn có thể cần tìm tùy chọn để bật chế độ này trong tài liệu của chương trình, nếu không Supervisor sẽ không thể xác định đúng trạng thái của chương trình.
Để minh họa tính năng của Supervisor, chúng ta sẽ tạo một script shell mà chỉ in ra một số thông tin dự đoán mỗi giây, nhưng chạy liên tục ở background cho đến khi bị dừng thủ công.
Sử dụng nano hoặc trình soạn thảo bạn thích, mở tệp có tên idle.sh
trong thư mục home:
nano ~/idle.sh
~/idle.sh
Lưu và đóng tệp. Nếu bạn sử dụng nano, nhấn Ctrl+X, sau đó khi được nhắc, nhấn Y và Enter.
Tiếp theo, đặt tệp script thành executable:
chmod +x ~/idle.sh
Các tệp cấu hình cho từng chương trình của Supervisor được đặt tại thư mục /etc/supervisor/conf.d, thường mỗi chương trình có một tệp và có đuôi .conf.
Chúng ta sẽ tạo một tệp cấu hình cho script vừa tạo, ví dụ: /etc/supervisor/conf.d/idle.conf:
sudo nano /etc/supervisor/conf.d/idle.conf
Thêm nội dung sau vào tệp:
/etc/supervisor/conf.d/idle.conf
Giải thích từng dòng:
command=/home/ubuntu/idle.sh
Xác định chương trình có tên idle và đường dẫn đầy đủ tới script.autostart=true
Chỉ thị Supervisor tự động khởi động chương trình khi hệ thống khởi động.autorestart=true
Chỉ thị Supervisor tự động khởi động lại chương trình nếu nó bị dừng.stderr_logfile=/var/log/idle.err.log
Đường dẫn tệp nhật ký cho stderr.stdout_logfile=/var/log/idle.out.log
Đường dẫn tệp nhật ký cho stdout.
Lưu và đóng tệp.
Hai dòng cuối cùng xác định vị trí của hai tệp nhật ký chính cho chương trình. Như các tên tùy chọn gợi ý, stdout và stderr sẽ được chuyển hướng đến các vị trí stdout_logfile và stderr_logfile tương ứng. Các thư mục được chỉ định phải tồn tại trước đó, vì Supervisor sẽ không tự động tạo các thư mục bị thiếu.
Cấu hình mà chúng ta đã tạo ở đây là một mẫu tối thiểu cho một chương trình của Supervisor. Tài liệu của Supervisor liệt kê nhiều tùy chọn cấu hình bổ sung có thể được sử dụng để điều chỉnh cách các chương trình được chạy.
Sau khi tệp cấu hình của chúng ta được tạo và lưu, chúng ta có thể thông báo cho Supervisor về chương trình mới thông qua lệnh supervisorctl. Đầu tiên, chúng ta yêu cầu Supervisor tìm các cấu hình chương trình mới hoặc đã thay đổi trong thư mục /etc/supervisor/conf.d
bằng lệnh:
sudo supervisorctl reread
Ouput
Tiếp theo, cập nhật Supervisor:
sudo supervisorctl update
output
Bất cứ khi nào bạn thay đổi tệp cấu hình của một chương trình, hãy chạy lại hai lệnh trên để áp dụng thay đổi.
Giờ, chương trình của bạn sẽ chạy. Bạn có thể kiểm tra output bằng cách xem tệp log:
sudo tail /var/log/idle.out.log
output
Bước 3 – Quản lý chương trình
Ngoài việc chạy chương trình, bạn cũng có thể dừng, khởi động lại, hoặc xem trạng thái của chúng.
Công cụ supervisorctl
, mà chúng ta đã sử dụng ở Bước 2, cũng có chế độ tương tác để bạn điều khiển chương trình.
Để vào chế độ tương tác, chạy:
sudo supervisorctl
output
Gõ help
để xem các lệnh có sẵn:
supervisor> help
output
Để dừng một chương trình, gõ:
supervisor> stop idle
output
Để khởi động lại:
supervisor> start idle
output
Để xem log, sử dụng lệnh tail
:
supervisor> tail idle
output
Để xem log stderr, dùng:
supervisor> tail idle stderr
output
Để xem trạng thái của các chương trình, dùng:
supervisor> status
output
Để thoát khỏi chế độ tương tác, gõ quit
hoặc nhấn Ctrl+C:
supervisor> quit
Kết luận
Trong hướng dẫn này, bạn đã nắm được cách cài đặt và quản lý Supervisor – một công cụ giám sát tiến trình nhẹ nhưng ổn định, lý tưởng cho các triển khai quy mô nhỏ. Với khả năng tự duy trì và tự tạo log độc lập, Supervisor tích hợp dễ dàng vào hệ thống triển khai lớn hơn. Nếu bạn đang chạy nhiều ứng dụng nhỏ cần truy cập qua web, hãy cân nhắc tìm hiểu thêm cách cấu hình Nginx làm reverse proxy – một thành phần cơ bản, linh hoạt và có thể tái sử dụng trong các môi trường triển khai nhỏ.