Khi triển khai ứng dụng ASP.NET Core trên máy chủ Linux, một vấn đề phổ biến là tiến trình bị chấm dứt ngay khi phiên terminal kết thúc. Điều này khiến ứng dụng ngừng hoạt động và không thể truy cập được — điều hoàn toàn không chấp nhận được trong môi trường production. Ngoài ra, nếu tiến trình gặp sự cố hoặc hệ thống khởi động lại, người quản trị phải can thiệp thủ công để khởi động lại ứng dụng, gây gián đoạn dịch vụ.
Để giải quyết triệt để các vấn đề trên, Supervisor — một công cụ quản lý tiến trình mã nguồn mở viết bằng Python — cung cấp khả năng giám sát, tự động khởi động lại tiến trình khi bị lỗi, và tích hợp với hệ thống init của Linux để chạy ngay từ lúc khởi động hệ thống.
Cài đặt Supervisor trên CentOS 7
- Cài đặt công cụ quản lý gói Python:
yum install python-setuptools - Cài đặt Supervisor:
easy_install supervisor
Cấu hình Supervisor
- Tạo thư mục cấu hình và file cấu hình chính:
mkdir -p /etc/supervisor echo_supervisord_conf > /etc/supervisor/supervisord.conf - Chỉnh sửa
supervisord.confđể bao gồm các file cấu hình ứng dụng con:
Bỏ comment và chỉnh sửa phần[include]như sau:[include] files = conf.d/*.conf - Tạo thư mục chứa cấu hình ứng dụng:
mkdir /etc/supervisor/conf.d - Tạo file cấu hình cho ứng dụng ASP.NET Core, ví dụ:
/etc/supervisor/conf.d/webapp.conf:[program:webapp] command=dotnet MyApp.dll directory=/opt/myapp autostart=true autorestart=true stderr_logfile=/var/log/myapp.err.log stdout_logfile=/var/log/myapp.out.log environment=ASPNETCORE_ENVIRONMENT=Production user=myuser stopsignal=INT - Khởi động Supervisor:
supervisord -c /etc/supervisor/supervisord.conf
Thiết lập Supervisor khởi động cùng hệ thống
Tạo unit file systemd tại /usr/lib/systemd/system/supervisord.service:
[Unit]
Description=Supervisor process control system
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Sau đó kích hoạt dịch vụ:
systemctl daemon-reload
systemctl enable supervisord
systemctl start supervisord
Một số lệnh quản trị thường dùng
supervisorctl status # Xem trạng thái tất cả tiến trình
supervisorctl start webapp # Khởi động ứng dụng 'webapp'
supervisorctl stop webapp # Dừng ứng dụng
supervisorctl restart webapp # Khởi động lại
supervisorctl reload # Tải lại cấu hình sau khi thay đổi