como ajustar a seqüência de inicialização usando o systemd

3

Eu preciso enviar e-mail usando o postfix como servidor, uma vez que o wifi tenha recebido o endereço IP (baseado no dhcpcd). Parece que systemd por padrão postfix de inicialização antes de wifi (wlan0) está pronto. A conseqüência associada a isso é que o postfix não pôde ser executado em segundo plano e o e-mail não pode ser enviado com êxito. No entanto, se eu executar o script a seguir (ou seja, abc.sh ) na inicialização, o e-mail pode definitivamente passar:

sleep 60
systemctl restart postfix
echo 'email content' | mail -s 'titile' [email protected] 

O arquivo de serviço associado ao abc.sh é fornecido abaixo:

[Unit]
Description=pptp_setup
Requires=network-online.target
After=network-online.target

[Service]
Type=forking
ExecStart=/home/pi/script/abc.sh

[Install]
WantedBy=multi-user.target 

Observe que o sleep 60 e o systemctl restart postfix é o truque para garantir que o email seja enviado. Se somente o sleep 60 for aplicado sem reiniciar o postfix, o email ainda não poderá ser enviado como o postfix não inicializa corretamente inicialmente (como mencionado acima, ele pode ser carregado antes de receber um IP). Além disso, se somente o postfix for reiniciado sem suspensão por 60 segundos, a reinicialização do postfix ainda falhará, mesmo Requer = network-online.target e After = network-online.target foram aplicados no arquivo de serviço.

Minha pergunta é como configurar o postfix corretamente para que ele seja inicializado depois que o wifi tenha recebido o endereço IP.

    
por Chenming Zhang 30.04.2016 / 12:32

2 respostas

2

Eu experimentei os mesmos problemas ao implantar o Ubuntu 16.10 em um novo MiniPC (oposto ao Ubuntu 14.x que funcionou bem).

Finalmente, encontrei uma solução automatizada para isso: ativar o NetworkManager-wait-online.service e implantar um script personalizado que reinicia o serviço postfix + -5 minutos após a inicialização da máquina (supondo que a conexão sem fio esteja ativa por então).

Ative isso. É uma abordagem genérica que pode ser benéfica para outros serviços além do Postfix, por isso guardo-a no script. systemctl enable NetworkManager-wait-online.service; systemctl status NetworkManager-wait-online.service;

Adicionar um temporizador Systemd ao cliente + serviço @info O temporizador iniciará UMA VEZ, {x} minutos depois que a máquina foi inicializada. %código% nano /etc/systemd/system/mjd-restart-postfix-after-wlan-connected.timer [Unit] Description=(timer)mjd-restart-postfix-after-wlan-connected [Timer] OnBootSec=5min [Install] WantedBy=timers.target

nano /etc/systemd/system/mjd-restart-postfix-after-wlan-connected.service [Unit] Description=mjd-restart-postfix-after-wlan-connected [Service] Type=oneshot ExecStart=/bin/sh -ec "systemctl restart postfix; systemctl status postfix; uname -a | /usr/bin/mailx -s \"Server ('hostname'): postfix was restarted.\" [email protected]"

C. Reiniciar MYUNIT=mjd-restart-postfix-after-wlan-connected MYTIMER=${MYUNIT}.timer systemctl enable ${MYTIMER}; systemctl status ${MYTIMER}; systemctl list-units --all | grep "${MYUNIT}" systemctl status ${MYUNIT} # espera 5 minutos

D. Verifica reboot

Se o conteúdo desses dois arquivos de configuração (um de Resolver e um do Postfix) não for o mesmo, o problema será PROBLEMÁTICO (o postfix foi iniciado antes que a LAN / WLAN seja conectada). cat /etc/resolv.conf cat /var/spool/postfix/etc/resolv.conf

Info @doc link @doc link @doc qshape adiada @doc cat / var / log / syslog | egrep "NetworkManager | postfix"

    
por 20.01.2017 / 14:40
1

É um problema sempre verde com systemd , como discutido muitas vezes em muitos lugares . Com a ativação de "rede lenta", sua melhor chance provavelmente é IP_FREEBIND . Você não pode modificar isso apenas para postfix, mas para todo o sistema usando:

echo "1" > /proc/sys/net/ipv4/ip_nonlocal_bind

na conta root. É bem descrito na página de manual para ip(7) .

    
por 30.04.2016 / 12:42