Baptiste Daroussin, một thành viên của Nhóm Cốt lõi FreeBSD và là tác giả của trình quản lý gói pkg, đang phát triển một trình quản lý hệ thống mới cho FreeBSD—rcd. Trình quản lý hệ thống rcd được gọi bởi tiến trình init thay vì /etc/rc, đọc các tệp cấu hình dịch vụ (/etc/rcd.d/*.ucl), xây dựng cây phụ thuộc và khởi chạy các dịch vụ song song bất cứ khi nào có thể. Sau đó, nó giám sát các dịch vụ và khởi động lại chúng nếu cần thiết.
Việc điều khiển tiến trình nền và các hoạt động với các dịch vụ có thể được thực hiện bằng cách truyền trực tiếp các lệnh đến socket UNIX hoặc sử dụng tiện ích dòng lệnh rctl. Các tệp đơn vị với các tham số dịch vụ được định dạng bằng UCL, tương tự như định dạng của nginx và các tệp cấu hình liên kết với các phần tử được mượn từ JSON để đơn giản hóa quá trình xử lý tự động. Có thể tạo các mẫu tệp đơn vị điển hình và viết các trình xử lý tích hợp bằng Lua. Ví dụ về một tệp đơn vị để khởi động nginx: name = "nginx"; description = "Máy chủ HTTP Nginx"; type = "simple"; command = "/usr/local/sbin/nginx"; command_args = "-g 'daemon off;'"; provides = ["nginx", "http"]; requires = ["NETWORKING", "sshd"]; restart { policy = "always"; max_retries = 10; delay = 2000; backoff = "linear"; } process { user = "www"; group = "www"; cpuset = "0-3"; } } rctl { memoryuse = { action = "deny"; amount = "2g"; }; pcpu = { action = "throttle"; amount = "80"; }; }
Thay vì sử dụng các tệp PID, việc theo dõi hoạt động của các tiến trình đang chạy được thực hiện bằng cách sử dụng các mô tả được trả về bởi lệnh gọi hệ thống pdfork(). Hệ thống hỗ trợ kích hoạt các dịch vụ chỉ khi truy cập vào socket mạng và khả năng bảo vệ các dịch vụ quan trọng khỏi bị buộc phải chấm dứt trong trường hợp thiếu bộ nhớ. Phiên bản của tiến trình nền rcd có thể được cập nhật ngay lập tức mà không làm mất trạng thái.
Lệnh rctl được sử dụng để giới hạn tài nguyên cấp cho một dịch vụ, và các dịch vụ có thể được chạy trong môi trường biệt lập để cách ly hoàn toàn. Quyền truy cập vào socket điều khiển UNIX có thể được cấu hình cho từng dịch vụ riêng lẻ. Chế độ ngủ được hỗ trợ.
Trình quản lý hệ thống hoàn toàn tương thích ngược với hệ thống khởi động tuần tự dịch vụ rc.d hiện có và có thể được sử dụng mà không cần sửa đổi các tập lệnh rc.d và tệp cấu hình hiện có. Chỉ cần cài đặt rcd trên một hệ thống đang chạy, và sau khi khởi động lại, mọi thứ sẽ tiếp tục hoạt động như trước, ngoại trừ thời gian khởi động được rút ngắn do khởi động dịch vụ song song. Khả năng tương thích này sẽ đơn giản hóa việc chuyển đổi hệ thống sang rcd và cho phép chuyển đổi dần các tập lệnh rc.d hiện có sang định dạng tệp đơn vị.
Để tương thích với rc.d, một loại đơn vị "cũ" đặc biệt được hỗ trợ. Rcd quét nội dung của /etc/rc.d/ và /usr/local/etc/rc.d/, phân tích các tiêu đề PROVIDE/REQUIRE/BEFORE/KEYWORD trong các tập lệnh, đọc các thiết lập rc.conf và xác định trạng thái thực thi của tập lệnh, sau đó xử lý từng tập lệnh như một đơn vị ảo cũ. Khi sử dụng lệnh rcctl để quản lý các đơn vị ảo như vậy, các thao tác được dịch sang định dạng cũ; ví dụ, thực thi "rcctl reload sshd" sẽ chạy "/etc/rc.d/sshd reload."
Nguồn: opennet.ru
