Linux中的xinetd是一个强大的超级服务器,它是一种管理超级服务器和通过TCP/IP网络提供各种服务的高级方法。本文将介绍如何使用xinetd来管理服务。
1. 安装xinetd
在大多数Linux发行版中,xinetd应该已经被默认安装。如果没有安装,请使用以下命令安装:
sudo apt-get install xinetd
2. 配置xinetd
xinetd的配置文件为/etc/xinetd.conf
。该文件的语法为注释行(#开头)、空行和服务配置项。下面是一个简单的示例:
# default: on
# description: An example service
service test_service
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/local/bin/test_server
server_args = -daemon
disable = no
}
在上述配置文件中,我们定义了一个服务名为test_service,它的端口类型为流形式,协议为TCP,不等待服务器的退出,以root用户的身份运行,使用/usr/local/bin/test_server作为服务器,带有-daemon参数。最后,我们将该服务禁用标志设置为no。
3. 重启xinetd
在修改完xinetd配置文件后,需要重启xinetd以使其生效。使用以下命令重启xinetd:
sudo service xinetd restart
4. 添加服务
除了在/etc/xinetd.conf
中定义服务之外,我们还可以将服务的定义放在单独的文件中,然后通过在/etc/xinetd.conf
中使用includedir
选项来包含该文件夹。例如,我们在/etc/xinetd.d
目录下创建一个文件名为test_service
的文件来定义服务。
service test_service
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/local/bin/test_server_2
server_args = -daemon
disable = no
}
在上述配置文件中,我们定义了一个服务名为test_service,它的端口类型为流形式,协议为TCP,不等待服务器的退出,以root用户的身份运行,使用/usr/local/bin/test_server_2作为服务器,带有-daemon参数。最后,我们将该服务禁用标志设置为no。
5. 验证服务
使用如下命令来检查xinetd是否成功运行服务器:
sudo netstat -anp | grep 80
如果可以看到xinetd侦听端口80,则表示服务已成功启动。
示例 1
实现一个能够在xinetd中部署的echo服务。步骤如下:
- 编写一个简单的echo程序echo.c。
```c
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv) {
int listenfd, connfd;
struct sockaddr_in servaddr, cliaddr;
socklen_t len;
char buf[1024];
ssize_t n;
listenfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(8080);
bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
listen(listenfd, 5);
while (1) {
len = sizeof(cliaddr);
connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &len);
while ((n = read(connfd, buf, 1024)) > 0) {
write(connfd, buf, n);
}
close(connfd);
}
return 0;
}
```
- 使用gcc编译echo程序
gcc -o echo echo.c
- 配置xinetd服务并重启xinetd服务。配置文件如下:
service echo
{
type = UNLISTED
port = 8080
socket_type = stream
protocol = tcp
wait = no
user = root
server = /path/to/echo
server_args =
log_on_failure += USERID
}
重启服务:
sudo service xinetd restart
- 测试echo服务。
运行以下命令,测试xinetd服务器是否正常工作:
telnet localhost 8080
如果成功,telnet将显示连接已建立并提示输入内容,这些内容将被回显到telnet客户端。
示例 2
步骤如下:
- 创建一个简单的CGI程序sum.cgi,它从URL参数中读取两个数字,将其相加,并将结果作为HTML响应返回给浏览器。
```c
#include
#include
#include
#include
int main(int argc, char argv) {
char query_string = getenv("QUERY_STRING");
int num1, num2;
char ptr;
printf("Content-type: text/html\n\n");
printf("<html><body>\n");
if (query_string != NULL) {
ptr = strtok(query_string, "&");
if (ptr !== NULL) {
num1 = atoi(strchr(ptr, '=') + 1);
ptr = strtok(NULL, "&");
}
if (ptr != NULL) {
num2 = atoi(strchr(ptr, '=') + 1);
printf("<p>%d + %d = %d</p>\n", num1, num2, num1 + num2);
} else {
printf("<p>No parameters provided.</p>\n");
}
} else {
printf("<p>No parameters provided.</p>\n");
}
printf("</body></html>\n");
return 0;
}
```
- 编译sum.cgi程序
这将需要使用CGI库来编译程序。例如,在Debian/Ubuntu系统上,您可以使用以下命令安装CGI库:
sudo apt-get install libcgi-fast-perl libapache2-mod-perl2
然后使用以下命令编译程序:
gcc -o sum.cgi sum.c -lcgi
注意:命令行参数-lcgi
是指连接到CGI库。
- 配置xinetd服务并重启xinetd服务。配置文件如下:
service sum
{
type = UNLISTED
port = 8080
socket_type = stream
protocol = tcp
wait = no
user = root
server = /path/to/sum.cgi
server_args =
log_on_failure += USERID
}
重启服务:
sudo service xinetd restart
- 在浏览器中测试CGI程序:
输入以下URL:
http://localhost:8080/sum.cgi?num1=2&num2=3
您应该会看到两个数字的总和显示在浏览器上。
以上是关于使用xinetd管理Linux服务的完整攻略,我们使用了两个示例来帮助您理解如何使用xinetd。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux基于xinetd服务的管理方法详解 - Python技术站