Quản lý tiến trình nền trong Linux với Supervisor

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

  1. Cài đặt công cụ quản lý gói Python:
    yum install python-setuptools
  2. Cài đặt Supervisor:
    easy_install supervisor

Cấu hình Supervisor

  1. 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
  2. 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
  3. Tạo thư mục chứa cấu hình ứng dụng:
    mkdir /etc/supervisor/conf.d
  4. 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
  5. 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

Thẻ: Supervisor linux systemd ASP.NET Core Process Management

Đăng vào ngày 10 tháng 8 lúc 20:39