Cách sử dụng Daemon Supervisor trên Debian

Cách sử dụng Daemon Supervisor trên Debian

Trong môi trường Debian, việc quản lý các tiến trình nền bằng systemd hay init.d đôi khi chưa đủ linh hoạt khi cần giám sát, tự khởi động lại, hay scale nhiều instance một cách nhanh gọn. Supervisor là một process control system chạy trên Python, cho phép bạn định nghĩa, theo dõi và quản lý daemon thông qua file cấu hình đơn giản.

Với Supervisor, bất kỳ tiến trình nào – từ web server tự viết, worker xử lý queue cho đến script chạy dài hạn – đều có thể được daemonize, auto-restart và quản lý tập trung bằng supervisorctl. Bài này sẽ tập trung vào cách cài đặt và sử dụng Supervisor trên Debian để quản lý daemon hiệu quả hơn.

1. Daemon Supervisor trên Debian là gì?

Supervisor là một process control system (hệ thống điều khiển tiến trình) viết bằng Python, chạy như một daemon trên hệ điều hành. Trên Debian, Supervisor đóng vai trò là một trình quản lý daemon:

  • Cho phép bạn biến bất kỳ tiến trình nào (script, web server, worker, job xử lý nền…) thành dịch vụ (daemon).
  • Hỗ trợ autostart khi hệ thống hoặc chính Supervisor khởi động.
  • Tự động autorestart nếu tiến trình bị crash hoặc dừng bất thường.
  • Cung cấp công cụ dòng lệnh supervisorctl và API để giám sát, điều khiển tiến trình (start, stop, restart, status).
  • Quản lý nhiều tiến trình độc lập thông qua các file cấu hình trong /etc/supervisor/conf.d/.

2. Cách sử dụng Daemon Supervisor trên Debian

Bước 1: Cài đặt Supervisor trên Debian

sudo apt update
sudo apt install supervisor -y

Bước 2: Sau khi cài đặt, Supervisor sẽ tự chạy dưới dạng Service:

systemctl status supervisor

Bước 3: Chuyển sang cấu hình Supervisor

– Tệp cấu hình của giám sát là /etc/supervisor/supervisord.conf

– Các tệp cấu hình cho các ứng dụng do Supervisor quản lý được lưu /etc/supervisor/conf.d/trong thư mục. Bạn cần cấu hình từng ứng dụng. /etc/supervisor/conf.d/Hãy tạo xxxxxx.confmột tệp cấu hình cho mỗi ứng dụng.

Ví dụ về nội dung tệp conf:

[program:cloudreve]
command=/pipu/cloudreve/cloudreve
directory=/pipu/cloudreve/
user = root
stopsignal = INT
autostart = true
autorestart = true
startsecs = 1
stderr_logfile = /var/log/cloudreve.err.log

Thêm Debian để khởi động

systemctl enable supervisor

supervisorctl start all

3. Một số lệnh để quản lý dịch vụ với Supervisorctl?

# Kiểm tra danh sách chương trình
sudo supervisorctl status

# Khởi động tiến trình
sudo supervisorctl start myapp

# Dừng tiến trình
sudo supervisorctl stop myapp

# Restart tiến trình
sudo supervisorctl restart myapp

# Xem trạng thái chi tiết
sudo supervisorctl tail -f myapp

Khởi động Superviso cùng hệ thống?

sudo systemctl enable supervisor
sudo systemctl start supervisor

3. Một số lưu ý khi sử dụng Daemon Supervisor trên Debian

– Quyền và User chạy tiến trình

  • Lưu ý: Tránh chạy daemon bằng root nếu không cần thiết → dễ gây rủi ro bảo mật.
  • Sự cố: Nếu khai báo user= trong cấu hình nhưng user đó không có quyền truy cập file/script, tiến trình sẽ fail ngay khi start.

–  Đường dẫn tuyệt đối

  • Lưu ý: commanddirectory trong config nên dùng đường dẫn tuyệt đối.
  • Sự cố: Dùng đường dẫn tương đối → Supervisor không tìm thấy file, báo lỗi “No such file or directory”.

– Log file và dung lượng đĩa

  • Lưu ý: Supervisor ghi log stdout/stderr của tiến trình vào file (vd: /var/log/myapp.out.log).
  • Sự cố: Nếu ứng dụng in log quá nhiều → log file phình to → đầy ổ cứng: Cách xử lý: Dùng logrotate hoặc cấu hình stdout_logfile_maxbytesstdout_logfile_backups.

– Autorestart không hoạt động như mong đợi

  • Lưu ý: autorestart=true chỉ restart khi tiến trình thoát bất thường. Nếu tiến trình exit code = 0 → Supervisor nghĩ là “chạy xong rồi” nên không restart.
  • Cách xử lý: Dùng autorestart=unexpected + exitcodes= để định nghĩa các mã thoát cần restart.

– Chạy nhiều instance

  • Lưu ý: Muốn chạy nhiều instance của cùng một chương trình thì phải khai báo process_name=%(program_name)s_%(process_num)02d + numprocs=N.
  • Sự cố: Nếu quên cấu hình này → Supervisor chỉ chạy được 1 process duy nhất.

–  Xung đột với systemd

  • Lưu ý: Debian mặc định dùng systemd. Nếu cùng lúc khai báo service trong systemd và Supervisor → dễ trùng port hoặc xung đột quản lý.
  • Giải pháp: Quyết định rõ dịch vụ nào do systemd quản lý, dịch vụ nào để Supervisor quản lý.

– Config không áp dụng ngay

  • Sự cố: Chỉnh sửa file .conf nhưng service không thay đổi.
  • Nguyên nhân: Chưa chạy supervisorctl rereadsupervisorctl update.

Be the first to comment

Leave a Reply

Your email address will not be published.


*