Como posso executar o "rc.local" na inicialização?

75

Eu tenho um script que gostaria de executar quando meu sistema iniciar. Coloquei em "rc.local", mas não funciona. Como posso habilitá-lo para executar na inicialização?

pedroo
fonte
1
Onde está o comando xsetwacom? O /etc/rc.local é executado com um PATH muito simples na inicialização. Provavelmente difere do PATH em que você efetuou login no terminal. No terminal, digite: type -p xsetwacom e substitua o comando "xsetwacom" em /etc/rc.local pelo caminho completo, conforme retornado pelo "type -p". Você precisa fazer alguma inicialização manual antes que o xsetwacom funcione para você?
waltinator
3
Usando systemd como gerenciador de inicialização se certificar a compatibilidade rc.local está em execução:systemctl status rc-local.service
rubo77
O comentário do waltinator foi meu problema. Por causa do caminho mínimo, ele não sabia como executar os scripts que eu queria executar. O caminho carregado no meu sistema Ubuntu 14.04 no momento da execução do /etc/rc.local era o seguinte: / sbin: / usr / sbin: / bin: / usr / bin ... você pode verificar o seu colocando echo $PATH > /home/rc_local_pathno seu / etc / rc.local e, em seguida, verificando o arquivo após ser executado na inicialização.
RaisinBranCrunch
Lembre-se de que se seu script precisar ser executado continuamente, você deverá iniciá-lo como um daemon no rc.localarquivo!
totymedli
Use sudo systemctl enable rc-local.servicepara assegurar que /etc/rc.local é executado durante a inicialização do servidor
William

Respostas:

56

Você pode executar seu script manualmente? Caso contrário, é um problema com esse script; caso contrário, veja mais em rc.local. (Se esse script precisar ser executado como root, você precisará usar o sudo para executá-lo manualmente.)

Certifique-se de que /etc/rc.local seja executável e que o script que ele chama também seja executável.

$ ls -l /etc/rc.local
-rwxr-xr-x 1 root root 419 2010-08-27 11:26 /etc/rc.local

Verifique se o rc.local possui uma linha shebang (que é o padrão):

$ head -n1 /etc/rc.local
#!/bin/sh -e

fonte
Sim, eu posso executar o script manualmente. Como posso garantir que /etc/rc.local seja executável? O que eu tenho que digitar? É "$ ls -l /etc/rc.local -rwxr-xr-x 1"? Obrigado!
28410 pedroo
@pedroo: copiei exatamente o que vejo no meu terminal (para ver o prompt, a entrada e a saída acima). O comando é "ls -l /etc/rc.local" e, se for executável, terá esses Xs na saída.
3
Eu tentei o "ls -l /etc/rc.local" e é executável, mas não consigo executá-lo na inicialização ... Alguma idéia?
pedroo 28/10
1
@pedroo: Isso precisa do servidor X em execução, o que não acontece quando o rc.local é executado. Executá-lo a partir do rc.local fará com que ele saia sem fazer nada (embora eu espere que coloque uma mensagem no syslog ou em outro lugar). Você precisa colocar os comandos xsetwacom em ~ / .xinitrc ou / etc / X / xinit / xinitrc.
1
@pedroo: Como o rc.local contém comandos destinados a serem executados em um horário diferente. Crie um novo arquivo, você pode colocá-lo em ~ / bin , marcá-lo como executável (chmod ou propriedades no Nautilus), criar a primeira linha "#! / Bin / bash" e colocar seus comandos em linhas posteriores.
53

No meu caso, nenhuma das instruções foi uma solução perfeita. Se você foi tão azarado quanto eu, tente este detalhado

  1. Coloque todo o código em execução em um arquivo de texto separado com um nome arbitrário como foo.sh e salve-o em um local arbitrário.
  2. Adicionar, acrescentar

    #!/bin/sh

    como primeira linha do seu código.

  3. Tente executar seu foo.sh

    sudo foo.sh

    para verificar se não há erros.

  4. Forneça ao seu script /etc/rc.local o caminho completo e o nome do script criado após o comando sh

    sh '/path/to/your/script/foo.sh'
  5. Lembre-se de colocar a linha acima antes da última linha do código

    exit 0

    no final do script /etc/rc.local.

  6. Verifique a primeira linha do /etc/rc.local para ser

    #!/bin/sh -e
  7. Torne seu /etc/rc.local executável, caso ainda não seja executável por

    sudo chown root /etc/rc.local
    sudo chmod 755 /etc/rc.local
  8. Verifique se tudo funciona bem executando

    sudo /etc/init.d/rc.local start
  9. Teste reinicie seu sistema.
shvahabi
fonte
6
A etapa 8 foi a chave, verificando se o script será executado no ambiente de inicialização. No meu caso, preciso fornecer o caminho completo para o comando.
22615 Peter Gluck
Prefeito e grandes nomes, ele funciona em centos, mas é sudo /etc/rc.local startexecutado pela primeira vez.
A1Gard
Obrigado - esta quebra realmente ajudou para mim e, como acima, o passo 8 também foi a chave para mim! Sem isso, ele não redirecionaria +1 (para referência, aplicativo de nó em execução no servidor de nuvem bitnami usando para sempre para execução contínua).
fidev 29/09/16
Passo 8 foi uma boa dica, mas acho que o passo 7 pode ser o meu fixo, eu estava tentando executar o script usando cron para abrir um túnel, mas ele estava falhando aleatoriamente
SeanClt
28

Nas versões mais recentes do Ubuntu systemdé usado e /etc/rc.localnem sempre é carregado por padrão.

Verifique se o serviço de compatibilidade está carregado com

systemctl status rc-local.service

captura de tela

Se ele contiver ativo (encerrado), sua configuração parecerá correta e você poderá ter outro erro no seu /etc/rc.localarquivo (este pode ser um comando que falha por exemplo).

rubo77
fonte
4
se o rc-local.service não estiver ativado, verifique esta postagem que explica como habilitar o /etc/rc.local com o Systemd
yaitloutou
3

2 sugestões.

  1. Verifique se o arquivo de script de destino também está marcado como executável.
  2. O script de destino está executando um comando sudo ? Nesse caso, você pode fornecer a senha do sudo.

Minha culpa. Basta verificar um então. Obrigado pela correção enzotib :)

Ankit
fonte
8
rc.localé executado como root, portanto, nenhuma senha é necessária.
enzotib