xinetd não inicia

2

Tola pergunta ... não consigo fazer o xinetd iniciar na minha caixa de linux (CENTOS 4.8).

Eu tenho chegado a removê-lo e reinstalá-lo via yum. Quando eu tento iniciá-lo, pará-lo, etc. Eu não tenho erro algum.

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

Espero ver algum status padrão do sistema (por exemplo, "Serviço iniciado - [OK]". Também não vejo entradas de registro em / var / log / messages

Eu tentei executar o script de inicialização com a opção -d mas nada. Sem erros. Nenhuma mensagem de confirmação que o serviço foi iniciado. Nada.

Alguma ideia?

[UPDATE] - De acordo com as recomendações, aqui está uma saída de 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
    
por Mike B 25.10.2009 / 02:28

9 respostas

2

Use o comando "strace" para depurar o xinetd, exemplo:

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

Em seguida, examine log.txt para ver o que está errado com sua configuração.

Eu recomendo que você faça backup de suas configurações, desinstale o xinedt, remova /etc/xinetd.conf e /etc/xinetd.d/ e, em seguida, instale-o novamente usando o yum. Quando você puder iniciá-lo, poderá adicionar mais serviços passo a passo.

    
por 25.10.2009 / 10:54
3

Quando um serviço não inicia e não apresenta uma mensagem de erro, provavelmente vale a pena tentar iniciar o serviço manualmente. A primeira coisa a fazer é executar:

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

Isso mostrará todos os comandos que estão sendo executados para iniciar o serviço. Isso pode lhe dar uma pista de por que não está começando. Se não, você pode encontrar o comando final usado para iniciar o daemon e executá-lo manualmente. Isso geralmente se mostra útil. Se isso ainda não ajudar, você deve executar o comando sob strace.

(Nota: Eu não usei o CentOS há muito tempo, então caminhos e coisas podem não estar corretos. Eu não acho que ele ainda use o upstart, mas se isso acontecer, procure em /etc/event.d/ xinetd ou /etc/init/xinetd.conf e que deve ter o comando para ser executado manualmente.)

    
por 25.10.2009 / 02:43
3

Você pode obter algumas informações úteis se ignorar o script de inicialização e executar o xinetd diretamente com o sinalizador de depuração -d.

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

Na minha caixa Gentoo quando não tenho nenhum serviço definido, o comando acima sairá após o resultado abaixo da depuração

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

Com um serviço habilitado (chargen neste caso, em /etc/xinetd.d/chargen-stream altere a linha 'disable = yes' para 'disable = no') executando o comando acima produz a seguinte saída e o xinetd não sai até pressionar 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

Como nota de rodapé, se você executar o script init com o chargen ativado, então você poderá usar o netstat para ver o xinetd ouvindo na porta chargen, executando o seguinte comando:

netstat -tap | grep xinetd

A saída deve ser algo como isto:

tcp    0   0 *:chargen        *:*       LISTEN     23439/xinetd
    
por 27.10.2009 / 06:02
1

Para mim, geralmente, isso é uma indicação de que há algo errado com o script para controlar o serviço, ou seja, a variável que tem o binário não está apontando para o local correto.

Você pode cat /etc/init.d/xinetd e nos deixar ver o que ele diz?

    
por 25.10.2009 / 02:56
1
Xinetd é uma besta estranha. Como Zoredache mencionou, não será iniciado a menos que tenha algo para fazer. Você diz que está tentando obter o tftpd em execução, que é executado através do xinetd.

Por padrão, quando o tftpd-server é instalado, ele coloca um arquivo chamado tftp em /etc/xinetd.d. Um diretório xinetd olha quando começa a ver se tem alguma coisa para fazer. No arquivo /etc/xinetd.d/tftp, veja que há uma linha que diz "disable = yes". Se houver um, provavelmente é problema seu. xinetd inicia, lê o arquivo, mas está sendo informado que o tftp está desativado. Então, sem nada para fazer, sai.

Para resolver este problema (se este for realmente o problema), edite o arquivo /etc/xinetd.d/tftp e mude o "disable = yes" para "disable = no". Agora tente reiniciar o xinetd.

    
por 25.10.2009 / 03:56
1

Algumas coisas para verificar:

Seu /etc/xinetd.conf deve ser algo assim:

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

Você também deve verificar as permissões do script xinetd e quaisquer binários e arquivos relacionados, certifique-se de que eles são executáveis, se necessário, etc. Parece trivial, mas essas coisas às vezes são negligenciadas (para consternação de um administrador após horas de discussões. )

Como o bit 'disable = yes' já foi abordado, esse não é o problema.

Você pode editar o / etc / sysconfig / xinetd para passar esses argumentos para o xinetd:

-d -dontfork - isso ativará o modo de depuração e fará com que o xinetd permaneça "ativo" mesmo que nada esteja sendo executado, talvez ele ofereça mais informações.

    
por 25.10.2009 / 08:16
0

Ocorreu um problema semelhante no CentOS x64 em execução no OpenVZ com o veth.

Comentou esta linha: ["$ {NETWORKING}"="yes"] || sair 0

Basta colocar # antes desta linha em /etc/init.d/xinetd e isso funciona para mim agora. Eu acho que é um problema com a verificação de rede ao usar a interface veth.

    
por 21.01.2010 / 15:57
0

Se não estiver funcionando com o comando service, certifique-se de que o xinetd esteja realmente registrado como um serviço usando o chkconfig (ele parece do seu script como se estivesse registrado, mas ainda assim ...):

chkconfig --list xinetd

Você deve ver:

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

Se todos os níveis estiverem desativados ou se o xinetd não estiver registrado como um serviço:

chkconfig --add xinetd
chkconfig --level 345 xinetd on
    
por 21.01.2010 / 17:51
0

No RHEL, a variável NETWORK é avaliada em / etc / sysconfig / network, que é derivado do script init. Sua variável provavelmente está definida como NETWORKING = no ou não configurada. Se você definir esse valor, deverá estar tudo pronto

    
por 12.08.2010 / 22:16