Por que o comando em /etc/rc.local não é executado durante a inicialização?

34

Eu tenho um único comando no meu script /etc/rc.local que deve iniciar o daemon de atualização para Minúsculo RSS minúsculo durante a inicialização, mas o script não é executado durante a inicialização. Por quê?

Todo o arquivo /etc/rc.local:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/sbin/start-stop-daemon -b -c www-data:www-data -S -x /usr/bin/php /var/www/ttrss/update_daemon2.php -- -quiet

exit 0

/etc/rc.local é executável:

# ls -l /etc/rc.local
-rwxr-xr-x 1 root root 342 May 25 16:14 /etc/rc.local

/etc/init.d/rc.local existe e é executável:

# ls -l /etc/init.d/rc.local
-rwxr-xr-x 1 root root 801 Jul 27  2012 /etc/init.d/rc.local

/etc/init.d/rc.local deve ser executado na inicialização deste runlevel:

# runlevel 
N 2
# ls -l /etc/rc2.d/S99rc.local 
lrwxrwxrwx 1 root root 18 Sep 22  2012 /etc/rc2.d/S99rc.local -> ../init.d/rc.local

Se eu chamar manualmente o /etc/rc.local a partir da linha de comando, o update_daemon carrega ...

# /etc/rc.local
# ps ax | grep update_daemon2.php
2233 ?        S      0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet
2234 ?        S      0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet

... que tenho que lembrar de fazer toda vez que meu servidor for reiniciado até que esse problema seja corrigido.

Similar perguntas < existe um href="https://askubuntu.com/q/239600/161623"> , mas até agora eu tenho sido incapaz de aplicar as informações dentro do meu problema específico.

Por que o comando em rc.local não é executado durante a inicialização?

    
por x-x 25.05.2013 / 08:52

7 respostas

20

O script rc.local sai se algum erro ocorrer durante a execução de qualquer um dos seus comandos (mencione o -e flag em #!/bin/sh -e ).

É possível que alguns pré-requisitos não sejam atendidos quando você tenta executar seus comandos quando a rc.local execução ocorre, portanto, a execução do comando falha.

Encontrei a mesma coisa enquanto definia manualmente o cpu governor e não o fiz em rc.local . Aqui está minha solução personalizada, que usa update-rc.d para fazer seus comandos serem executados na inicialização:

  1. Crie um arquivo myscript.sh no diretório /etc/init.d com um cabeçalho: #!/bin/sh
  2. Coloque seus comandos personalizados como o conteúdo
  3. Torne-o executável: sudo chmod +x /etc/init.d/myscript.sh
  4. Crie links simbólicos para o seu script para vários runlevels: sudo update-rc.d myscript.sh defaults

Além disso, você pode verificar os scripts /etc/network/if-up.d e ver se você pode acionar seus comandos quando a rede for iniciada.

    
por Drew 08.03.2014 / 20:09
5

experimente sudo sysv-rc-conf e confira se rc.local está ativado

rc.local         [ ]   [x]   [x]   [x]   [x]   [ ]   [ ]   [ ]
    
por zuba 25.05.2013 / 11:30
3

Tivemos esse problema em alguns servidores hospedados carregando regras do FW.

Nessas caixas, elas são reiniciadas MUITO rapidamente e encontramos apenas colocando um "sleep 1" em rc.local antes que as instruções de carga pareçam corrigir o problema. Eu acho que deu um pouco de tempo para as interfaces resolverem antes de carregar as regras do FW.

    
por Simon Hart 04.12.2014 / 13:27
3

eu tive algum problema semelhante em rc.local não executando na inicialização

sshades me forneceu a seguinte resposta:

Ubuntu is now using systemd, and rc.local is now considered a service which is turned "off" by default. You can turn rc.local "on" by entering the following command and rebooting:

sudo systemctl enable rc-local.service

https://askubuntu.com/a/770033/395498

embora eu não tenha testado sua solução, acho que parece lógico e funcionará. No entanto:

Eu também encontrei uma solução que adicionar um script para ./.config/autostart-scripts/ fará o truque

    
por Diet Bos 14.05.2016 / 21:34
2

Certifique-se de que o script rc.local seja executável:

sudo chmod +x /etc/rc.local

Em seguida, ative-o:

sudo systemctl enable rc-local.service

Reinicialize o sistema ou inicie o script manualmente executando:

sudo systemctl start  rc-local.service

O status do serviço pode ser exibido executando:

$ sudo systemctl status rc-local.service
● rc-local.service - /etc/rc.local Compatibility
   Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled) 
Drop-In: /lib/systemd/system/rc-local.service.d
           └─debian.conf
   Active: active (running) since Mon 2018-04-02 10:39:44 -03; 1s ago
  Process: 2044 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
 Main PID: 2049 (svscanboot)
Tasks: 3
 Memory: 556.0K
CPU: 10ms
CGroup: /system.slice/rc-local.service
    
por leobocao 02.04.2018 / 15:48
1

Uma vez eu editei rc.local com o Bloco de Notas no Windows e ele começou a ter esse problema.

Nesse caso, o uso de um editor de texto suporta conversão EOL, como o Notepad ++, para converter o estilo EOL em 'Unix', pode resolvê-lo.

Você também pode fazer isso por :set ff=unix no Vim.

    
por SyaSyaNown 07.03.2016 / 18:15
0

Você terá que certificar-se de que /etc/rc.local seja executado durante a inicialização do servidor com o comando:

sudo systemctl enable rc-local.service

    
por William 17.11.2017 / 11:34