Problema com scripts de inicialização no init.d

Iniciado por eugabgomes, 07 de Abril de 2011, 16:13

tópico anterior - próximo tópico

eugabgomes

Bom dia gente..
Estou gerenciando um programa "jail", ou seja, com todos seus módulos e aplicativos compilados pelo fonte e instalados numa mesma pasta, inclusive apache, php, mysql, e por aí vai. nenhum foi baixado por apt-get, portanto não posso baixar scripts de inicialização defaults. Logo, criei todos os scripts de inicializaçao na unha, coloquei no init.d, dei permissao chmod 775 de acesso a todos e de um update.rc "script" defaults.

Porém sempre que dou o boot, alguns carregam e outros não. Alguem pode me dar uma ajuda por favor??
agradeço desde já

zekkerj

Tente acompanhar os logs do sistema, se há alguma pista do erro na inicialização.

Observe a sequência da ativação desses serviços, pode ser que eles estejam subindo antes de outros serviços necessários. Tem como configurar os scripts para que o próprio update-grub defina a ordem correta de carga.

Por fim, lembre-se de que os scripts de inicialização vão rodar com ambiente reduzido. Lembre-se de ajustar o PATH do script, ou usar os caminhos de arquivos completos, principalmente os que estiverem em /sbin ou /usr/sbin.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

eugabgomes

Obrigado de antemão pela resposta, zekkerj.
Então, provavelmente o problema está na ordem de carregamento desses scripts, afinal um deles é o mysql e um outro é dependente do mysql.
como faço para coloca-los na ordem?
porém, outro que nunca carrega no boot e não precisa de nenhum para rodar é o apache. já coloquei como default no update.rc, mas para rodar, tenho que sempre dar um /etc/init.d/apache2 start; nao começa default nem que a vaca tussa

zekkerj

Pra mudar a ordem de inicialização, vá à pasta "/etc/rc2.d" (*) e procure pelo link dos scripts. Digamos que o mysql tenha recebido número sequencial 20, ele vai estar linkado como "S20mysql". Se o outro também tiver recebido número sequencial 20, mas o nome for lexicamente anterior (p.ex. "S20baselocal") esse serviço vai ser iniciado antes. Nesse caso vc tem que renomear o link do outro serviço pra outro número sequencial, p.ex "S21baselocal".

Fazer isso na unha dá um trabalhão. O "update-rc.d" reconhece uma sequência especial de comentários no início dos scripts, onde vc pode especificar que um determinado script precisa rodar antes ou depois de outro. Nesse caso, vc acrescentaria ao script "/etc/init.d/baselocal" o texto abaixo:


#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          baselocal
# Required-Start:    $local_fs $remote_fs $network $syslog mysql
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Inicia/termina o serviço da base local
### END INIT INFO


Daí quando vc rodar o update-rc.d novamente, ele vai acertar os números sequenciais de acordo.

(*) O Ubuntu usa por padrão o runlevel 2, mesmo no modo gráfico. Isso pode ser o motivo do apache não estar rodando.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

eugabgomes

Cara, muito obrigado mesmo pela resposta! Você foi altamente explicativo e prestativo.
Respondeu exatamente o que eu queria!

bom, o apache esta no runlevel 2 mesmo... mas eu tenho a impressao de que o problema está no script...  o script do apache só contem funçoes como apache_start() e apache_stop(), mas nada para chamar essas funções. está correto ou preciso adicionar alguma coisa?
bom, vou mandar em anexo meu script do apache. se voce puder, por favor dê uma olhada.

Citar#!/bin/sh
    #
    # ======================================.
    # APACHE 2 Control
    # =====================================.

    APACHECTL=/usr/programas/apache2/bin/apachectl
    TIME_START=`date +%D-%M-%Y`
    TIME_STOP=`date +%D-%M-%Y`

    function apache_start ()
    {

    if ( `$APACHECTL start` 2> /dev/null ) ;then
    tput cup 0 30
    echo .[OK].
    else
    tput cup 0 30
    echo .[ERROR].
    fi

    }

    function apache_stop ()
    {
    if ( `$APACHECTL stop` 2> /dev/null ) ;then
    tput cup 0  30
    echo .[OK].
    else
    tput cup 0 30
    echo .[ERROR].
    fi

    }

    function apache_status ()
    {
    if ( `ps -aef |grep httpd ` 2> /dev/null ) ;then
    tput cup 0  30
    echo .[OK] SERVER ON..
    else
    tput cup 0 30
    echo .[ERROR] SERVER DOWN..
    fi

    }

    case $1 in

    start)
    tput clear
    echo . Iniciando daemon Apache2 ..
    apache_start
    echo .$TIME_START.

    ;;

    stop)
    tput clear
    echo . Iniciando daemon Apache2 ..
    apache_stop
    echo .$TIME_STOP.
    ;;

    status)
    tput clear
    apache_status
    ;;
    *)

    echo .Entre com as opcoes [ start ou stop ].
    ;;
    esac

zekkerj

Eu tentei rodar o apache algumas vezes fora do ambiente normal, e notei que ele depende de algumas variáveis de ambiente (p.ex. APACHE_RUN_USER, APACHE_RUN_GROUP). Confirme que esse ambiente está sendo iniciado. Talvez vc precise carregar algum script de inicialização, pra garantir esse ambiente mínimo.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

eugabgomes

Me desculpe a insistência, mas nao consigo encontrar quais são as variáveis necessárias para esse ambiente
você saberia me dizer quais são, ou me indicar algum link para ler?

Abraços

zekkerj

Essas eu descobri quando tentei rodar o apache fora do script, pra depurar um problema no php.

No caso, vc tem que se basear na documentação oficial (http://httpd.apache.org/docs/).

É o preço que se paga por não usar os pacotes da distro...
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D