Como posso executar o comando na inicialização (rc.local alternative) no Ubuntu 16.10

23

Estou configurando cotas no meu servidor Linode executando o Ubuntu 16.10 e recebo o seguinte erro

  

Não é possível stat () dispositivo montado / dev / root: Nenhum desses arquivos ou diretório

Para corrigir isso, eu cheguei este tópico para a correção que é feita adicionando

ln -s /dev/xvda /dev/root
/etc/init.d/quota restart

para o /etc/rc.local . Mas o Ubuntu 16.10 não usa rc.local mais em vez disso usa systemd . Qual é a alternativa para rc.local Como posso executar os comandos acima na inicialização?

Também ativei o serviço usando systemctl enable rc-local.service , mas não funcionou para mim. Qualquer lead seria apreciado.

    
por Saurabh Sharma 23.02.2017 / 19:55

2 respostas

25

Introdução

Acho que você não deve criar um novo serviço como sugerido no link de George. O rc-local.service já existe no systemd e o arquivo de serviço sugere que o rc.local , se existir e for executável, é puxado automaticamente para multi-user.target . Portanto, não há necessidade de recriar ou forçar algo que acabou de ser feito de outra maneira pelo systemd-rc-local-generator .

Uma solução

Uma solução rápida (não sei se é o jeito canônico):

Em um terminal, faça:

printf '%s\n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local
sudo chmod +x /etc/rc.local
sudo reboot

Depois disso, o rc.local será chamado na inicialização do sistema. Insira o que você quer.

Antecedentes

Se você fizer isso em um terminal:

sudo systemctl edit --full rc-local

Você pode ver que o comentário principal contém linhas como:

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.

Isso indica que, neste sistema, se houver um arquivo chamado /etc/rc.local , que é executável, ele será puxado para o multi-user.target automaticamente. Então você acabou de criar o arquivo correspondente ( sudo touch... ) e torná-lo executável ( sudo chmod +x ... ).

    
por Jan 28.05.2017 / 07:27
13

Eu vi esta solução sugerida que envolve o uso de systemd aqui :

  1. Crie um serviço:

    sudo vi /etc/systemd/system/rc-local.service
    
  2. Adicione seu código lá:

    [Unit]
    Description=/etc/rc.local Compatibility
    ConditionPathExists=/etc/rc.local
    
    [Service]
    Type=forking
    ExecStart=/etc/rc.local start
    TimeoutSec=0
    StandardOutput=tty
    RemainAfterExit=yes
    SysVStartPriority=99
    
    [Install]
    WantedBy=multi-user.target
    
  3. Crie e certifique-se de que /etc/rc.local seja executável e adicione este código dentro dele:

      

    sudo chmod +x /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.
    
    exit 0
    
  4. Ativar o serviço:

    sudo systemctl enable rc-local
    
  5. Iniciar o serviço e verificar o status:

    sudo systemctl start rc-local.service
    sudo systemctl status rc-local.service
    
  6. Se tudo correr bem, você pode adicionar seu code ao arquivo /etc/rc.local e reiniciá-lo.

Nota: testado no Lubuntu 16.10.

Fonte:

link

    
por George Udosen 23.02.2017 / 20:31

Tags