código bash em rc.local não executando após o boot

2

Alguém sabe por que um sistema não executaria o código de script dentro do rc.local na inicialização? Eu tenho um script bash de pós-configuração que quero executar após a instalação inicial do VMware ESX (Red Hat) e, por algum motivo, ele não parece ser executado. Eu tenho a configuração para registrar seu início de execução e até mesmo seu progresso, para que eu possa ver até onde ele chega, caso ele falhe em algum momento, mas mesmo quando eu olho para esse log, eu estou achando que ele nem sequer iniciou o processo. execução do código de script. Eu já verifiquei que o script tem permissões de execução (755), o que mais eu deveria estar olhando?

Aqui estão as primeiras linhas do meu código:

#!/bin/sh
echo >> /tmp/configLog ""
echo >> /tmp/configLog "Entering maintenance mode"
    
por mrTomahawk 18.05.2009 / 20:03

10 respostas

3

Então, existe o / tmp / configLog? Se assim for, seu script está disparando e está morrendo em algum lugar.

Comece com o básico:

  1. Coloque um simples, de uma linha em /etc/rc.local, assim.
    touch /tmp/itworked
    Isso funcionou? Após a reinicialização, o / tmp / itworked existe? Se sim, então o rc.local está sendo executado.
  2. Outra pegadinha comum é que, se o seu script é um daemon, ele precisa lidar com o forking no plano de fundo ou precisa ser baseado em rc.local. Se o seu script é / bin / myscript, então rc.local deve ter:
    /bin/myscript &
    nele. Demora muito tempo a correr? Pode haver um tempo limite em algum lugar nos scripts de inicialização para impedir que os usuários interrompam o processo de inicialização - o segundo plano do processo contornará você se existir.
  3. Se o 'toque' funcionar e você estiver em segundo plano, ele deve estar em seu script em algum lugar. O que acontece quando você executa
    /bin/sh /etc/rc.local
    a partir da linha de comando?
  4. Como o Jason disse, verifique o dmesg, assim como o / var / log / messages em busca de pistas.
  5. Quando o script é executado a partir de rc.local, ele não terá o conjunto completo de variáveis de ambiente que o usuário root possui quando efetuado login. $ PATH pode ser diferente. Não confie em $ PATH. Você também pode testar seu script agendando um trabalho 'at' que vai chegar perto de simular o ambiente.
por 06.08.2009 / 05:26
1

Não é algo simples como um erro de digitação, é? Se isso acontecer:

#!/bin/hash

Realmente seja:

#!/bin/bash

?

(Assim como CK disse em comentário, agora que eu olho)

    
por 22.05.2009 / 10:47
1

Tem certeza de que seu sistema suporta rc.local? Se não estiver documentado, você precisará seguir todos os scripts de inicialização. Você começa em / etc / inittab. (Você pode achar que de lá você vai para /etc/rc.d/rc)

Em alguns sistemas, o /etc/rc.d/rc.local é suportado através de um link simbólico /etc/rc.d/rcX.d/S99local. (onde X é o nível de execução apropriado).

Se você estiver usando o RedHat, não há razão real para não criar seu próprio script de inicialização, adicioná-lo ao /etc/rc.d/init.d, chkconfig --add o script e chkconfig no script. Isso fará com que os links simbólicos corretos entrem nos diretórios /etc/rc.d/rcX.d e torne os scripts init fáceis de implementar ou desabilitar.

Usar o rc.local obsoleto é bom para um hack rápido se o seu sistema o suportar, mas não é realmente apropriado para algo importante ou permanente.

    
por 23.05.2009 / 20:55
1

Não tenho certeza se o processamento de scripts init no linux é sequencial ou paralelo, mas os sistemas Solaris iniciam os scripts sequencialmente. Se um script de inicialização anterior ainda não tiver terminado (vejo isso às vezes devido à dependência de sendmail / DNS), os últimos não serão lançados com a rapidez que você imagina.

Use ps para ver se um script de inicialização anterior ainda está em execução.

    
por 03.01.2011 / 17:30
0

Talvez haja um erro de sintaxe no script rc.local. Se você tentar executá-lo manualmente a partir da linha de comando após o sistema ter sido inicializado, ele será executado corretamente?

    
por 18.05.2009 / 20:08
0

Você verificou as permissões no diretório que contém o arquivo rc.local?

    
por 18.05.2009 / 20:09
0

O seu código não deve ficar mais parecido com isso? 3 mudanças aqui:

#!/bin/bash
echo "" >> /tmp/configLog
echo "Entering maintenance mode" >> /tmp/configLog
    
por 18.05.2009 / 20:26
0

rc.local era a maneira BSD de executar scripts de inicialização. Embora muitas versões do Linux suportem ter um arquivo chamado "rc.local" que é executado na inicialização, como eu lembro, é necessário um monte de links simbólicos e outras colas para funcionar, pois o Linux seguiu a maneira do Solaris de lidar com scripts de inicialização. >     

por 20.05.2009 / 10:00
0

SELinux.

Experimente o getenforce para ver se o selinux está ativado. Ele retornará 1 ou aplicando se estiver ativado. Então, se for verificar o dmesg para ver se há um erro relacionado ao selinux que parece estar relacionado ao seu script.

    
por 18.06.2009 / 09:06
0

Se a primeira linha realmente disser #! / bin / hash, você receberá um erro semelhante a este:

-bash: ./test.sh: /bin/hash: bad interpreter: No such file or directory

quando é executado.

Você também pode querer verificar se o script tem permissões de execução.

    
por 18.06.2009 / 19:45