O script de inicialização não é executado após a reinicialização no Solaris

O script de inicialização não é executado após a reinicialização no Solaris

Eu tenho um comando para iniciar o Apache /etc/rc3.dque não é executado quando o servidor é reinicializado. O script é nomeado S75Apache2. Alguém especulou que isso ocorre porque o link tem um "A" maiúsculo no nome e pode funcionar se for renomeado para S75apache2.

Alguém pode confirmar? Procurei documentação, mas não consigo encontrar uma resposta. Na verdade, não posso testar isso sem reiniciar o servidor novamente (o que prefiro não fazer).

Responder1

Os scripts de inicialização do Solaris são uma dor. O A maiúsculo não importa, há um script /etc/rc.dque encontra todos os arquivos /etc/rc3.dque começam com 'S' e os executa em ordem numérica.

Isso deixa você começando do básico:

  1. O conjunto é /etc/rc3.d/S75Apache2executável?

  2. Esse script tem um '#!' linha? A linha está correta (sem bytes não imprimíveis, etc.)?

  3. Se for um script bash ou ksh, execute-o como ksh -n /etc/rc3.d/S75Apache2 start. Isso lhe dirá se há erros de sintaxe.

  4. Se você puder executar esse script como root, experimente: /etc/rc3.d/S75Apache2 starte /etc/rc3.d/S75Apache2 stop verifique cuidadosamente se ele inicia httpde para httpd. No mínimo, execute você mesmo o script com os argumentos 'start' e 'stop'. Use set -xpara ver o que o script faz em tempo de execução. Verifique se o que ele faz corresponde ao que você acredita que faz.

  5. Leia /etc/rc3.d/S75Apache2cuidadosamente. PATHé pouco preenchido na inicialização e seu script pode não saber onde alguns executáveis ​​estão no momento da inicialização, mas pode ser executado após a inicialização. Tente não presumir muito - podem não existir arquivos que você acha que existem, coisas assim.

  6. KnnApache2Certifique-se de que não exista um script no /etc/rc3.d. Acredito que o Solaris initserá executado (por exemplo) K76Apache2 stopquando fizer a transição do nível de execução 3 para o nível de execução 5.

  7. Certifique-se de que o script altere o ID do usuário adequadamente. Isso provavelmente não é importante para o Apache, visto que seu script provavelmente apenas chama apachectl startalguns comandos do prólogo, mas se você executar httpdiretamente, certifique-se de que o httpdprocesso resultante tenha o ID de usuário correto. Use sudoou algo no script para acertar.

Responder2

Acontece que HAVIA um bug no script de inicialização: a variável LD_LIBRARY_PATH não foi definida corretamente. Definir isso no script resolverá o problema.

Para referência futura, existe um arquivo de log que contém mensagens de inicialização que continham o erro que levou à solução do nosso problema. O arquivo é:

/var/svc/log/milestone-multi-user-server:default.log

Encontrei uma referência a isso no arquivo /etc/rc3.d/README. Mais um dia, mais uma pepita de conhecimento!

Responder3

Você lançou seu próprio Apache (ou seja, compilou-o a partir do código-fonte) ou está simplesmente usando o Apache que vem pré-instalado com o Solaris 10?

Bem, isso realmente não importa, se você está no Solaris 10 (ou posterior) como você diz que estávocê não deveria usar scripts de inicialização do Solaris, você deve usar o SMF. (sim, tecnicamente os scripts de inicialização ainda são suportados, mas como você aponta, eles são um problema e o SMF é muito melhor)

Para iniciar (agora e também automaticamente após uma reinicialização) o servidor Web Apache 2.2 que vem pré-instalado com o Solaris 10, basta fazer o seguinte:

svcadm habilitar /rede/http:apache2

Se você lançou seu próprio Apache, então você precisa criar um manifesto SMF, importar o manifesto e pronto. Basta pesquisar no Google por "SMF Solaris" e você encontrará muitas receitas.

informação relacionada