Linux:如何使一个守护进程/服务与xinetd一起使用?

任何人都知道服务器使用xinetd需要进行哪些更改?

服务器是在Linux上运行的.NET邮件服务器

看到这篇文章的底部作为参考: Lumisoft邮件服务器论坛post

注意:xinetd,不是单一服务。 [x] inetd是一个互联网超级服务器。
超级服务器按需启动服务器服务。
(而不是服务器服务连续运行,这是单一服务)

Solutions Collecting From Web of "Linux:如何使一个守护进程/服务与xinetd一起使用?"

inetd服务的运行方式与独立服务器不同。 inetd服务读取stdin并写入stdout,让inetd处理TCP / IP的血腥细节,而不是跟踪自己的套接字。 如果你想在inetd下运行一个服务器,那么它也必须这样做。

下面的程序在我的机器上的xinetd下运行得很好:

#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; } 

注意我一点都不担心套接字 – xinetd安排事情,以便服务可以读取标准输入并写入标准输出。 你只需要像在控制台上运行应用程序那样编写应用程序。 套接字详细信息在服务的配置文件中指定。 (注意,你可以使用stdin / stdout来获取/设置套接字的细节,这可能是实际的套接字 – 我不知道 – 但是你真的应该把这些东西放到inetd中。)

inetd服务对于一个需要接收数据并与用户进行一定程度的交互的应用程序来说非常棒。 IT通过tcp / udp通过管道从(x)inetd套接字数据到std {in,out,err}。 inetd应用程序也可以和tcpwrappers一起使用,通过系统策略文件和ACL来增强安全性。

所以是的,你会写你的应用程序像一个控制台应用程序,因为实际上它是一个控制台应用程序。 只要将inetd看作是从网络到应用程序输入的透明反向代理即可。

一个建议的话,写你的代码来正确处理过程信号,如果你需要与系统上的另一个进程交互使用unix套接字/先进先出。

另外,不要试图写一个一次传输大量数据或需要大量连接的应用程序。 可伸缩性是一个问题,因为inetd成了一个瓶颈,这就是为什么Apache和Sendmail放弃了对inetd的支持,而是将其作为单一应用程序来使用。 HTTP更适合这个角色,并且使用nginx的fastcgi(或插入最喜欢的框架)脚本最适合这种用例。

一个inetd的好例子是:

 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 

编辑你的/etc/services来包含你的app:myapp port#/ proto

并将你的应用程序添加到/etc/inetd.conf (或xinetd.d),如下所示:myapp stream tcp6 nowait myappuser / path / to / myapp myapp -arg_flags