systemd não roda /etc/rc.local?

11

Estou usando o Archlinux e comecei a tentar o systemd atualmente.

No entanto, descobri que o systemd não carrega meu script /etc/rc.local.

Como mencionado na página do Wiki, eu corri systemctl enable rc-local.service , mas isso não ajudou.

O conteúdo do meu arquivo /etc/rc.local é:

echo -n 120 > /sys/devices/platform/i8042/serio1/speed
echo -n 250 > /sys/devices/platform/i8042/serio1/sensitivity
iptables --table nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE

Alguma sugestão?

    
por Felix Yan 03.05.2011 / 09:59

6 respostas

14

O Arch pode não ter incluído o arquivo da unidade de serviço necessário para executar rc.local .

Basta criar um arquivo /etc/systemd/system/rc-local.service com o seguinte conteúdo (copiado textualmente do meu sistema systemd do Fedora):

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.

[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

Em seguida, basta executar systemctl enable rc-local.service como root para ativá-lo. Você também pode testá-lo / executá-lo agora executando systemctl start rc-local.service .

    
por 20.06.2011 / 09:32
27

Com o systemd 188-2, o systemd se queixa de não ter seção [Install] e, como tal, não é possível ativar o serviço rc.local. Pode ter sido o caso de versões anteriores, mas como o Arch só recentemente anunciou systemd se tornará o padrão que eu estou consertando o meu sistema.

Para corrigir isso, basta adicionar uma seção para o destino multiusuário em /etc/systemd/system/rc-local.service :

[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

Crie o script /etc/rc.local e torne-o executável com chmod +x /etc/rc.local

    
por 17.08.2012 / 14:31
3

O Pkgfile (no meu sistema) diz:

$ pkgfile --search rc-local.service
community/initscripts-systemd

Esse pacote instala outras coisas que você pode não querer, mas pode desativá-lo. Veja também: link

    
por 27.06.2011 / 04:54
2

Não se esqueça de fazer o executável rc.local - ou a camada de compatibilidade não irá executá-lo! Nos exemplos acima listados - você executaria chmod a + x para tornar o arquivo rc.local executável. Como segue:

$ chmod a+X /etc/systemd/system/rc-local.service 

Eu acho que outro possível problema é a localização do seu script rc.local! Se você ainda não adicionou a compatibilidade ao systemd (que deve ser construído - e parece ser por uma menção anterior já existente) você pode precisar verificar novamente a localização dos arquivos ... No meu sistema operacional eu tenho rc-local em /etc/rc.d/rc.local, então eu corri o seguinte:

$ sudo chmod a+x /etc/rc.d/rc.local
$ sudo systemctl restart rc-local.service
$ sudo systemctl status rc-local.service
rc-local.service - /etc/rc.d/rc.local Compatibility
      Loaded: loaded (/lib/systemd/system/rc-local.service; static)
      Active: active (exited) since Fri, 13 Apr 2012 14:42:39 -0600; 3s ago
     Process: 2285 ExecStart=/etc/rc.d/rc.local start (code=exited, status=0/SUCCESS)
      CGroup: name=systemd:/system/rc-local.service
    
por 06.05.2012 / 10:08
1

Duas dicas comuns:

  1. Não esqueça de fazer /etc/rc.d/rc.local executável. Você pode usar

    # chmod a+rx /etc/rc.d/rc.local
    

    para torná-lo executável.

  2. Não se esqueça de colocar uma linha #!/bin/sh na primeira linha de /etc/rc.d/rc.local . Veja como as coisas devem parecer:

    #  head -1 /etc/rc.d/rc.local 
    #!/bin/sh
    # file /etc/rc.d/rc.local 
    /etc/rc.d/rc.local: POSIX shell script, ASCII text executable
    

    Se você não obtiver resultados semelhantes, edite /etc/rc.d/rc.local para adicionar uma linha no topo contendo apenas #!/bin/sh .

por 27.08.2013 / 09:15
1

Se você tiver /etc/rc.local como um arquivo executável, ele será puxado para o processo de inicialização por systemd-rc-local-generator / rc-local.service .

Pelo menos /etc/rc.local é o caminho padrão usado, mas isso é definido pela distribuição. Porque é principalmente para compatibilidade com versões anteriores e distribuições diferentes estavam usando caminhos diferentes. Por exemplo. no Fedora, o caminho é /etc/rc.d/rc.local . Você pode verificar o caminho da seguinte forma:

$ systemctl cat rc-local.service
# /usr/lib/systemd/system/rc-local.service
# ...

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.d/rc.local is executable.
[Unit]
Description=/etc/rc.d/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.d/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.d/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

Parece que isso não é muito conhecido. Há várias postagens que mostram uma versão anterior do arquivo, que não tem esse comentário.

    
por 23.09.2017 / 20:30

Tags