O serviço systemd ativado não está sendo executado na inicialização, mas funciona quando executado manualmente

0

Em uma máquina, eu preparei um serviço firewall.service systemd que funciona bem naquela máquina rodando Debian 9.5.

Agora eu estou configurando outra máquina, também rodando o Debian 9.5, usando exatamente o mesmo script, mas se recusa a rodar na inicialização e não consigo encontrar nenhuma indicação do porquê.

Imediatamente após a inicialização, aqui está alguma saída, indicando para mim apenas que o systemd nunca tentou iniciar o serviço em primeiro lugar:

[root@bigbrother ~]# journalctl -u firewall
-- No entries --
[root@bigbrother ~]# systemctl status firewall
● firewall.service - Firewall setup via /etc/iptables.rules
   Loaded: loaded (/etc/systemd/system/firewall.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

O serviço de firewall está em /etc/systemd/system/firewall.service em ambas as máquinas e é assim:

[Unit]
Description=Firewall setup via /etc/iptables.rules
After=network.target

[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore /etc/iptables.rules

[Install]
WantedBy=network-online.target

Como você pode ver, ele apenas executa um iptables-restore command e é isso. Eu costumava executar isso com /etc/rc.local antes, mas acho que é preciso manter a moda e usar systemd para essas coisas (o que é bom, quando funciona).

O serviço está realmente ativado:

[root@bigbrother ~]# systemctl disable firewall
Removed /etc/systemd/system/network-online.target.wants/firewall.service.
[root@bigbrother ~]# systemctl enable firewall
Created symlink /etc/systemd/system/network-online.target.wants/firewall.service → /etc/systemd/system/firewall.service.

E funciona bem quando executado manualmente:

[root@bigbrother ~]# systemctl start firewall
[root@bigbrother ~]# systemctl status firewall
● firewall.service - Firewall setup via /etc/iptables.rules
   Loaded: loaded (/etc/systemd/system/firewall.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

Sep 09 17:10:52 bigbrother systemd[1]: Starting Firewall setup via /etc/iptables.rules...
Sep 09 17:10:53 bigbrother systemd[1]: Started Firewall setup via /etc/iptables.rules.

O que estou perdendo?

Eu olhei em volta para algumas questões semelhantes aqui, mas a que me deu mais promessas foi na verdade um erro de digitação, então estou totalmente perdido no momento. É a mesma versão do Debian que estou executando em um servidor diferente, então acho difícil acreditar que isso tenha algo a ver com a ordem dos serviços. Mesmo assim, vou de bom grado dar sugestões sobre isso.

    
por Teekin 09.09.2018 / 19:15

2 respostas

1

Talvez esteja correndo muito cedo. Este documento explica como o objetivo principal do network.target é ordenar as coisas corretamente no desligamento .

Em vez disso, o principal objetivo de network-pre.target é para uso com serviços de firewall . Os serviços que desejam ser executados antes de a rede ser configurada devem usar

Before=network-pre.target 
Wants=network-pre.target

Isto é o que eu vejo no firewalld.service Unit do Fedora 24, por exemplo, que eu acredito ser um front-end para iptables .

    
por 10.09.2018 / 21:05
1

WantedBy=network-online.target não faz parte da cadeia de dependência por padrão e você não deve usá-la dessa maneira.

Se você realmente precisa iniciar esse script depois que a rede estiver ativa, sugiro que você faça:

[Unit]
Description=Firewall setup via /etc/iptables.rules
After=network.target
Before=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore /etc/iptables.rules

[Install]
WantedBy=multi-user.target

link link

    
por 10.09.2018 / 21:20

Tags