xinetd不会启动

愚蠢的问题…我不能得到xinetd开始在我的Linux机器(CENTOS 4.8)。

我甚至有把它删除,并通过yum重新安装。 当我尝试启动它,停止等等,我根本没有任何错误。

[root@server ~]# service xinetd stop [root@server ~]# service xinetd start [root@server ~]# service xinetd restart 

我希望看到系统的一些标准状态(例如“服务启动 – [确定]”我也没有看到/ var / log / messages中的任何日志条目

我试着用-d选项运行init脚本,但是nada。 没有错误。 没有确认消息,该服务开始。 没有。

有任何想法吗?

[UPDATE] – 根据build议,这里是cat /etc/init.d/xinetd的输出

 #!/bin/bash # # xinetd This starts and stops xinetd. # # chkconfig: 345 56 50 # description: xinetd is a powerful replacement for inetd. \ # xinetd has access control mechanisms, extensive \ # logging capabilities, the ability to make services \ # available based on time, and can place \ # limits on the number of servers that can be started, \ # among other things. # # processname: /usr/sbin/xinetd # config: /etc/sysconfig/network # config: /etc/xinetd.conf # pidfile: /var/run/xinetd.pid PATH=/sbin:/bin:/usr/bin:/usr/sbin # Source function library. . /etc/init.d/functions # Get config. test -f /etc/sysconfig/network && . /etc/sysconfig/network # More config test -f /etc/sysconfig/xinetd && . /etc/sysconfig/xinetd # Check that we are root ... so non-root users stop here [ `id -u` = 0 ] || exit 1 # Check that networking is up. [ "${NETWORKING}" = "yes" ] || exit 0 [ -f /usr/sbin/xinetd ] || exit 1 [ -f /etc/xinetd.conf ] || exit 1 RETVAL=0 prog="xinetd" start(){ echo -n $"Starting $prog: " # Localization for xinetd is controlled in /etc/synconfig/xinetd if [ -z "$XINETD_LANG" -o "$XINETD_LANG" = "none" -o "$XINETD_LANG" = "NONE" ]; then unset LANG LC_TIME LC_ALL LC_MESSAGES LC_NUMERIC LC_MONETARY LC_COLLATE else LANG="$XINETD_LANG" LC_TIME="$XINETD_LANG" LC_ALL="$XINETD_LANG" LC_MESSAGES="$XINETD_LANG" LC_NUMERIC="$XINETD_LANG" LC_MONETARY="$XINETD_LANG" LC_COLLATE="$XINETD_LANG" export LANG LC_TIME LC_ALL LC_MESSAGES LC_NUMERIC LC_MONETARY LC_COLLATE fi unset HOME MAIL USER USERNAME daemon $prog -stayalive -pidfile /var/run/xinetd.pid "$EXTRAOPTIONS" RETVAL=$? echo touch /var/lock/subsys/xinetd return $RETVAL } stop(){ echo -n $"Stopping $prog: " killproc $prog RETVAL=$? echo rm -f /var/lock/subsys/xinetd return $RETVAL } reload(){ echo -n $"Reloading configuration: " killproc $prog -HUP RETVAL=$? echo return $RETVAL } restart(){ stop start } condrestart(){ [ -e /var/lock/subsys/xinetd ] && restart return 0 } # See how we were called. case "$1" in start) start ;; stop) stop ;; status) status $prog ;; restart) restart ;; reload) reload ;; condrestart) condrestart ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}" RETVAL=1 esac exit $RETVAL 

使用“strace”命令来debuggingxinetd,例如:

 yum install strace strace /usr/sbin/xinetd 2>&1 | tee log.txt 

然后检查log.txt,看看你的configuration出了什么问题。

我build议你备份你的configuration,卸载xinedt,删除/etc/xinetd.conf和/etc/xinetd.d/,然后用yum重新安装。 当你能够启动它时,你可以一步一步地添加更多的服务。

当一个服务没有启动并且没有给出错误信息时,可能值得尝试手动启动服务。 首先要做的是运行:

 # bash -x /etc/init.d/xinetd start 

这将显示所有正在运行的命令来启动服务。 这可能会给你一个线索,为什么它不是开始。 如果没有,那么你可以find最后的命令来启动守护进程并手动运行。 这通常certificate有帮助。 如果这仍然没有帮助,你应该在strace下运行命令。

(注意:我很久没有使用CentOS了,所以path和事情可能不正确,我不认为它使用了暴发户,但是如果是这样,查看/etc/event.d/xinetd或/ etc / init / xinetd.conf,并且应该有手动运行的命令。)

如果绕过启动脚本并直接使用debug标志-d运行xinetd,可能会得到一些有用的信息。

 /usr/sbin/xinetd -f /etc/xinetd.conf -d 

在我的Gentoo框中,当我没有定义任何服务时,上面的命令将在下面的debugging输出后退出

 09/10/26@21:26:05: DEBUG: 23117 {cnf_start_services} mask_max = 0, services_started = 0 09/10/26@21:26:05: CRITICAL: 23117 {init_services} no services. Exiting... 

启用一个服务(在这种情况下充电,在/etc/xinetd.d/chargen-stream中将'disable = yes'行更改为'disable = no')运行上述命令会产生以下输出,并且xinetd不会退出直到按下Ctrl-c。

 09/10/26@21:41:00: DEBUG: 23261 {cnf_start_services} Started service: chargen-stream 09/10/26@21:41:00: DEBUG: 23261 {cnf_start_services} mask_max = 6, services_started = 1 09/10/26@21:41:00: NOTICE: 23261 {main} xinetd Version 2.3.14 started with libwrap loadavg options compiled in. 09/10/26@21:41:00: NOTICE: 23261 {main} Started working: 1 available service 09/10/26@21:41:00: DEBUG: 23261 {main_loop} active_services = 1 

作为一个方面说明,如果你启动了使用chargen的init脚本,那么你应该可以使用netstat来查看xinetd在chargen端口上侦听,方法是运行以下命令:

 netstat -tap | grep xinetd 

输出应该是这样的:

 tcp 0 0 *:chargen *:* LISTEN 23439/xinetd 

对我来说,通常这表明脚本控制服务有问题,即具有二进制的variables没有指向正确的位置。

你可以猫/etc/init.d/xinetd,让我们看看它说什么?

xinetd是一个奇怪的野兽。 正如Zoredache提到的那样,除非有事可做,否则不会启动。 你说你试图让tftpd运行,它通过xinetd运行。

默认情况下,安装tftpd-server时,会在/etc/xinetd.d中放置一个名为tftp的文件。 当xinetd开始查看是否有任何事情时,它会查找目录。 在/etc/xinetd.d/tftp文件中,看到有一行表示“disable = yes”。 如果有的话,那可能是你的问题。 xinetd启动,读取文件但被告知tftp被禁用。 所以没有任何事情可以退出。

要解决这个问题(如果确实是这个问题),编辑/etc/xinetd.d/tftp文件并将“disable = yes”改为“disable = no”。 现在尝试重新启动xinetd。

夫妇的事情来检查:

你的/etc/xinetd.conf应该是这样的:

 defaults { instances = 60 log_type = SYSLOG authpriv log_on_success = HOST PID log_on_failure = HOST cps = 25 30 } includedir /etc/xinetd.d 

你还应该检查xinetd脚本和任何相关的二进制文件和文件的权限,确保它们是可执行的,如果需要的话等等。听起来很平凡,但是这些东西有时会被忽略(很多时候,pipe理员在经历了几个小时的争吵之后就不高兴了)。

既然'disable = yes'位已经被覆盖,那不是问题。

您可以编辑/ etc / sysconfig / xinetd以将这些parameter passing给xinetd:

-d -dontfork – 这将启用debugging模式,并导致xinetd保持“活着”,即使没有任何运行,也许它会给你更多的洞察力。

在OpenVZ上运行的CentOS x64上有类似的问题。

注释掉这一行:[“$ {NETWORKING}”=“是”] || 退出0

只要将#放在/etc/init.d/xinetd的这行之前,现在就可以工作了。 我认为这是使用veth界面进行networking检查的问题。

如果它不与服务命令一起使用,请确保xinetd实际上使用chkconfig注册为一个服务(它从脚本看起来好像是已注册的,但仍然是…):

 chkconfig --list xinetd 

你应该看到:

 xinetd 0:off 1:off 2:off 3:on 4:on 5:on 6:off 

如果所有级别都closures,或者xinetd没有注册为服务:

 chkconfig --add xinetd chkconfig --level 345 xinetd on 

在RHEL中,NETWORKvariables是在/ etc / sysconfig / network中计算得到的,它是从init脚本获得的。 您的variables可能设置为NETWORKING = no或者根本没有设置。 如果你设置这个值,你应该全部设置