Назад | Перейти на главную страницу

xinetd не запускается

Глупый вопрос ... Я не могу запустить xinetd на моем Linux-сервере (CENTOS 4.8).

Дошло до того, что удалить и переустановить через yum. Когда я пытаюсь запустить его, остановить и т. Д., Я вообще не получаю ошибки.

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

Я ожидаю увидеть какой-то стандартный статус от системы (например, «Служба запущена - [OK]». Я также не вижу никаких записей журнала в / var / log / messages

Я пробовал запустить сценарий инициализации с параметром -d, но нет. Ошибок нет. Нет подтверждающих сообщений о запуске службы. Ничего.

Любые идеи?

[ОБНОВЛЕНИЕ] - Согласно рекомендациям, вот вывод 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

Вы можете получить полезную информацию, если полностью обойдете сценарий запуска и запустите xinetd напрямую с флагом отладки -d.

/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, вы сможете использовать netstat, чтобы увидеть, как xinetd прослушивает порт chargen, выполнив следующую команду:

netstat -tap | grep xinetd

Результат должен выглядеть примерно так:

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

Если служба не запускается и не выдает сообщения об ошибке, вероятно, стоит попробовать запустить службу вручную. Первым делом нужно запустить:

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

Это покажет вам все команды, которые запускаются для запуска службы. Это может дать вам понять, почему он не запускается. Если это не так, вы можете найти последнюю команду, используемую для запуска демона, и запустить ее вручную. Обычно это оказывается полезным. Если это по-прежнему не помогает, вам следует запустить команду под strace.

(Примечание: я не использовал CentOS долгое время, поэтому пути и вещи могут быть неправильными. Я не думаю, что он еще использует выскочку, но если это так, посмотрите в /etc/event.d/xinetd или / etc / init / xinetd.conf, и в нем должна быть команда для запуска вручную.)

Используйте команду "strace" для отладки xinetd, например:

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

Затем просмотрите файл log.txt, чтобы узнать, что не так с вашей конфигурацией.

Я бы порекомендовал вам сделать резервную копию ваших конфигураций, удалить xinedt, удалить /etc/xinetd.conf и /etc/xinetd.d/, а затем снова установить его с помощью yum. Когда вы сможете запустить его, вы сможете шаг за шагом добавлять дополнительные услуги.

xinetd - странный зверь. Как упоминал Зоредак, он не запустится, если ему нечего делать. Вы заявляете, что пытаетесь запустить tftpd, который работает через xinetd.

По умолчанию, когда установлен tftpd-сервер, он помещает файл с именем tftp в /etc/xinetd.d. Каталог xinetd заглядывает, когда начинает видеть, есть ли у него что-нибудь делать. В файле /etc/xinetd.d/tftp см. Строчку с надписью «disable = yes». Если он есть, вероятно, это ваша проблема. xinetd запускается, читает файл, но получает сообщение, что tftp отключен. Так что делать нечего.

Чтобы решить эту проблему (если это действительно проблема), отредактируйте файл /etc/xinetd.d/tftp и измените «disable = yes» на «disable = no». Теперь попробуйте перезапустить xinetd.

Для меня обычно это признак того, что что-то не так со сценарием для управления службой, т.е. переменная, в которой находится двоичный файл, не указывает на правильное место.

Вы можете пропустить /etc/init.d/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 и любых связанных двоичных файлов и файлов, убедиться, что они являются исполняемыми, если это необходимо, и т. Д. Звучит тривиально, но эти вещи иногда упускаются из виду (к большому разочарованию администратора после нескольких часов споров).

Поскольку бит 'disable = yes' уже был покрыт, проблема не в этом.

Вы можете отредактировать / etc / sysconfig / xinetd, чтобы передать эти аргументы в xinetd:

-d -dontfork - это включит режим отладки и заставит xinetd оставаться «живым», даже если ничего не запущено, возможно, это даст вам больше информации.

Была аналогичная проблема на CentOS x64, работающем на OpenVZ с veth.

Закомментировал эту строку: ["$ {NETWORKING}" = "yes"] || выход 0

Просто поместите # перед этой строкой в ​​/etc/init.d/xinetd, и теперь у меня это работает. Думаю проблема с проверкой сети при использовании veth интерфейса.

Если он не работает с командой службы, убедитесь, что xinetd действительно зарегистрирован как служба с помощью chkconfig (в вашем сценарии он выглядит так, как будто он зарегистрирован, но все же ...):

chkconfig --list xinetd

Тебе следует увидеть:

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

Если все уровни отключены или xinetd не зарегистрирован как служба:

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

В RHEL переменная NETWORK оценивается в / etc / sysconfig / network, источником которого является сценарий инициализации. Вероятно, ваша переменная установлена ​​в NETWORKING = no или не установлена ​​вообще. Если вы установите это значение, все должно быть настроено