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?
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.
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 4192010-08-2711:26/etc/rc.local
Verifique se o rc.local possui uma linha shebang (que é o padrão):
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
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.
Adicionar, acrescentar
#!/bin/sh
como primeira linha do seu código.
Tente executar seu foo.sh
sudo foo.sh
para verificar se não há erros.
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'
Lembre-se de colocar a linha acima antes da última linha do código
exit 0
no final do script /etc/rc.local.
Verifique a primeira linha do /etc/rc.local para ser
#!/bin/sh -e
Torne seu /etc/rc.local executável, caso ainda não seja executável por
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
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).
systemctl status rc-local.service
echo $PATH > /home/rc_local_path
no seu / etc / rc.local e, em seguida, verificando o arquivo após ser executado na inicialização.rc.local
arquivo!sudo systemctl enable rc-local.service
para assegurar que/etc/rc.local
é executado durante a inicialização do servidorRespostas:
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.
Verifique se o rc.local possui uma linha shebang (que é o padrão):
fonte
No meu caso, nenhuma das instruções foi uma solução perfeita. Se você foi tão azarado quanto eu, tente este detalhado
Adicionar, acrescentar
como primeira linha do seu código.
Tente executar seu foo.sh
para verificar se não há erros.
Forneça ao seu script /etc/rc.local o caminho completo e o nome do script criado após o comando sh
Lembre-se de colocar a linha acima antes da última linha do código
no final do script /etc/rc.local.
Verifique a primeira linha do /etc/rc.local para ser
Torne seu /etc/rc.local executável, caso ainda não seja executável por
Verifique se tudo funciona bem executando
fonte
sudo /etc/rc.local start
executado pela primeira vez.Nas versões mais recentes do Ubuntu
systemd
é usado e/etc/rc.local
nem sempre é carregado por padrão.Verifique se o serviço de compatibilidade está carregado com
Se ele contiver ativo (encerrado), sua configuração parecerá correta e você poderá ter outro erro no seu
/etc/rc.local
arquivo (este pode ser um comando que falha por exemplo).fonte
2 sugestões.
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 :)
fonte
rc.local
é executado como root, portanto, nenhuma senha é necessária.