2010-08-18 30 views
6

Bất kỳ ai biết những thay đổi nào là cần thiết để máy chủ hoạt động với xinetd?Linux: Làm thế nào để tạo một daemon/dịch vụ có thể sử dụng với xinetd?

Máy chủ là máy chủ lưu trữ .NET chạy trên Linux.

Xem dưới cùng của bài này để tham khảo: Lumisoft Mailserver Forum Post

Lưu ý: xinetd, không mono-dịch vụ. [x] inetd là một siêu máy chủ internet.
Máy chủ siêu tốc khởi động dịch vụ máy chủ theo yêu cầu.
(Ngược lại với dịch vụ máy chủ chạy liên tục, đó là dịch vụ đơn lẻ nào)

Trả lời

8

Dịch vụ inetd chạy khác với máy chủ độc lập. dịch vụ inetd đọc stdin và ghi vào stdout, cho phép inetd xử lý các chi tiết đẫm máu của TCP/IP, thay vì theo dõi các ổ cắm riêng của chúng. Nếu bạn muốn làm cho một máy chủ chạy dưới inetd, nó sẽ phải làm như vậy.

Các chương trình sau đây chỉ chạy tốt dưới xinetd trên máy tính của tôi:

#include <iostream> 
#include <string> 

using namespace std; // yeah, i'm lazy. 

int main() 
{ 
    string name; 
    cout << "What's your name? " << flush; 
    cin >> name; 
    cout << "Hi, " << name << "!" << endl; 
} 

Lưu ý tôi không phải ở tất cả lo lắng về ổ cắm - xinetd sắp xếp mọi thứ để các dịch vụ có thể đọc đầu vào tiêu chuẩn và ghi vào tiêu chuẩn đầu ra. Bạn chỉ cần viết ứng dụng của mình giống như bạn đang chạy ứng dụng trên bảng điều khiển, phần lớn. Chi tiết ổ cắm được chỉ định trong tệp cấu hình cho dịch vụ. (Lưu ý, bạn có thể có được/thiết lập chi tiết về socket sử dụng stdin/stdout, có thể là ổ cắm thực tế - tôi không chắc chắn - nhưng bạn thực sự nên để nội dung đó inetd.)

+0

Có mẫu nào, C++ hoặc C hay không? –

+0

@Quandary: đã cập nhật. – cHao

+0

Cảm ơn, trông thực sự rất đơn giản.Có thực sự là không nhiều hơn với nó? Vì vậy, nếu một khách hàng kết nối với cổng bất cứ điều gì, ông nhận được "tên của bạn là gì", gửi tên của mình, và được trở lại "Hi ". Và tôi cho rằng thời gian chờ được xử lý bởi xinetd. Rất buồn cười thực sự. Tôi nghĩ rằng tôi phải xem xét lập trình xinetd, nó làm cho một máy chủ trông đơn giản như một chương trình điều khiển đơn khách. –

1

Một dịch vụ inetd là thực sự tuyệt vời cho một trong những ứng dụng mà cần phải thực hiện trong dữ liệu và hành động với một mức độ tương tác với người dùng. CNTT hoạt động trên tcp/udp bằng cách truyền dữ liệu viva một ổ cắm từ (x) inetd đến std {in, out, err}. các ứng dụng inetd cũng hoạt động tốt với tcpwrappers để xâm nhập bảo mật mặc dù các tệp chính sách hệ thống và ACL.

Vì vậy, có bạn sẽ viết ứng dụng của bạn giống như ứng dụng bảng điều khiển vì trong thực tế, ứng dụng này là một ứng dụng giao diện điều khiển. Chỉ cần suy nghĩ của inetd như là một proxy ngược trong suốt từ mạng vào đầu vào của ứng dụng của bạn.

Lời khuyên, viết mã của bạn để xử lý tín hiệu quy trình một cách chính xác và nếu bạn cần tương tác với một quy trình khác trên hệ thống, hãy sử dụng ổ cắm unix/fifo cho điều đó.

Ngoài ra, đừng cố gắng viết một ứng dụng phát trực tuyến nhiều dữ liệu cùng một lúc hoặc cần nhiều kết nối. Khả năng mở rộng là một vấn đề như inetd trở thành một cổ chai, đây là lý do tại sao Apache và Sendmail giảm hỗ trợ cho inetd và ngồi như ứng dụng mono thay thế. HTTP phù hợp với vai trò này tốt hơn và kịch bản fastcgi (hoặc chèn khung yêu thích) với nginx hoạt động tốt nhất cho trường hợp sử dụng đó.

Một ví dụ tốt cho một inetd sẽ là:

lock = Mutex.new 

trap :HUP { #log the connection and cleanup } 
trap :USR1 { lock.synchronize do #stuff; end } 
trap :TERM { #clean up } 
trap :KILL { #clean up and die with error codes } 

puts "App name - version" 

loop do 
    ('%s> ' % Console.prompt).display 
    input = gets.chomp 
    command, *params = input.split /\s/ 
    case command 
    when /\Ahelp\z/i 
     puts App.help_text 
    when /\Ado\z/i 
     Action.perform *params 
    when /\Aquit\z/i 
     exit 
    else 
     puts 'Invalid command' 
    end 
end 
exit 

Chỉnh sửa của bạn /etc/services bao gồm ứng dụng của bạn như thế này: cổng myapp #/proto

và thêm ứng dụng của bạn để /etc/inetd.conf (hoặc xinetd. d) như thế này: luồng myapp tcp6 hiện đang chờ myappuser/path/to/myapp myapp -arg_flags

Các vấn đề liên quan