xinetd 无法启动

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 脚本,但一无所获。没有错误。没有服务已启动的确认消息。什么都没有。

有任何想法吗?

[更新] - 根据建议,这是 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

答案1

使用“strace”命令调试xinetd,例如:

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

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

我建议您备份您的配置,卸载 xinedt,删除 /etc/xinetd.conf 和 /etc/xinetd.d/,然后使用 yum 重新安装。当您能够启动它时,您可以逐步添加更多服务。

答案2

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

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

在我的 Gentoo 机器上,当我没有定义任何服务时,上述命令将在以下调试输出后退出

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...

启用服务后(在本例中为 chargen,在 /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

答案3

当服务无法启动且未显示错误消息时,可能需要尝试手动启动该服务。首先要运行:

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

这将向您显示正在运行以启动服务的所有命令。这可能会为您提供有关它为何无法启动的线索。如果没有,那么您可以找到用于启动守护进程的最终命令并手动运行它。这通常会有所帮助。如果这仍然没有帮助,您应该在 strace 下运行该命令。

(注意:我已经很久没有使用过 CentOS 了,所以路径和其他内容可能不正确。我认为它还没有使用 upstart,但如果使用了,请查看 /etc/event.d/xinetd 或 /etc/init/xinetd.conf,应该有手动运行的命令。)

答案4

对我来说,这通常表明控制服务的脚本有问题,也就是说,包含二进制文件的变量没有指向正确的位置。

您能 cat /etc/init.d/xinetd 并让我们看看它说了什么吗?

相关内容