Fedora 27 não está executando o rc.local ao inicializar

3

Eu estava tentando fazer com que o servidor Shadowsocks fosse executado automaticamente após a inicialização e usei o arquivo rc.local , mas não estava funcionando.

rc.local é agora:

/usr/local/bin/ssserver -c /etc/shadowsocks.json -d start
#!/bin/bash
exit 0
  • Adicionei a+x privilege a /etc/rc/d/rc.local .
  • Eu também fixei o link simbólico /etc/rc.local -> /etc/rc.d/rc.local (privilégio padrão 777 ) como sugerido aqui .

No entanto, o código em rc.local ainda não está funcionando ao inicializar. Descobriu-se que rc.local não está em execução quando o sistema é iniciado. Com alguma ajuda de aqui , consegui diagnosticar ainda mais a questão.

Aqui está o arquivo /etc/systemd/system/rc-local.service (não mudei nada):

[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

- Este arquivo está correto?

Quando faço systemctl enable rc-local , recebo este erro:

The unit files have no installation config (WantedBy, RequiredBy, Also, Alias
settings in the [Install] section, and DefaultInstance for template units).
This means they are not meant to be enabled using systemctl.
Possible reasons for having this kind of units are:
1) A unit may be statically enabled by being symlinked from another unit's 
.wants/ or .requires/ directory.
2) A unit's purpose may be to act as a helper for some other unit which has
a requirement dependency on it.
3) A unit may be started when needed via activation (socket, path, timer,
D-Bus, udev, scripted systemctl call, ...).
4) In case of template units, the unit is meant to be enabled with some
instance name specified.

Não sei ao certo qual é a minha situação, pois o arquivo rc.local é tão simples.

    
por jackxujh 14.11.2017 / 18:39

4 respostas

4

Você rc.local está corrompido!

/usr/local/bin/ssserver -c /etc/shadowsocks.json -d start
#!/bin/bash
exit 0

deve ser

#!/bin/bash
/usr/local/bin/ssserver -c /etc/shadowsocks.json -d start
exit 0

EDITAR:

Eu não sei exatamente o que está errado com o seu serviço rc.local systemd.

Eu, no entanto, criaria uma unidade systemd separada para shadowocks, assim você pode iniciar e parar isso ... por exemplo, quando você quer recarregar a configuração, e você assim como todos os outros que terão que manter o servidor sabe qual serviço reiniciar.

Um arquivo de unidade systemd de sombras de amostra:

[Unit]
Description=Shadowsocks proxy server

[Service]
User=www-shadow
Group=www-shadow
Type=simple
ExecStart=/usr/local/bin/ssserver -c /etc/shadowsocks/shadowsocks.json -a shadowsocks -v start
ExecStop=/usr/local/bin/ssserver -c /etc/shadowsocks/shadowsocks.json -a shadowsocks -v stop

[Install]
WantedBy=multi-user.target

Note que aqui temos um usuário www-shadow para executar o proxy, o usuário é membro de www-shadow group. Para manter seu /etc arrumado, é melhor criar um diretório /etc/shadowsocks e colocar o JSON junto com qualquer outro arquivo relacionado a shadowocks. Eu tenho o básico para o arquivo de unidade systemd acima de linode.com , no entanto, eles querem executar o proxy como root (baaaaaaaaaad) ... dado que ele usa a porta 8388 por padrão, duvido que isso seja necessário. Observe que, se você não criar um grupo e usuário www-shadow para a unidade, o systemd executará o serviço com felicidade como root (longa história, "aparentemente" por design).

Eu não tenho experiência com sombras (eu só usei o squid para proxy e ssh para proxies de meias ;-) e não tenho tempo para procurá-lo, mas depois de uma rápida olhada no arquivo unitário, parece razoável (além do root loucura).

Usar o arquivo rc.local unit (que é para compatibilidade com versões anteriores) não faz muito sentido, imho, você perde um ExecStop e você precisa lembrar que o rc.local é o shadowsocks ...

Se você quiser corrigir a unidade rc.local , ela deve ser 755 ( chmod 755 /etc/rc.d/rc.local ), ninguém quer um script daemon gravável do mundo, isso pode ser outro problema com ela. O iho, systemd nem sempre é razoável, mas duvido que seja executado um script gravável do mundo.

Por segurança, você poderia postar a saída de ls -l /etc/rc.d/rc.local em sua pergunta.

EDIT2:

D'oh (eu sou bobo, ele estava lá o tempo todo e eu não percebi), seu arquivo de unidade está faltando uma diretiva [Install] :

[Install]
WantedBy=multi-user.target
    
por 18.11.2017 / 19:59
1

O Fedora 27 usa systemd , que não executa /etc/rc.local

Existem várias soluções ou soluções alternativas sugeridas em AskUbuntu

    
por 15.11.2017 / 14:29
0

Se se /etc/rc.local estiver "rodando", você pode digitar algo assim em seu /etc/rc.local

/ bin / date > > /root/test.txt

Reinicialize e veja se há uma data no arquivo /root/test.txt.

    
por 15.11.2017 / 11:18
-1

Uma GUI pode facilitar a inicialização e a desativação de vários aplicativos; tente instalar e usar gnome-tweak-tool (claro, desde que uma GUI seja aplicável).

    
por 07.12.2017 / 08:22