On ecrit le script qui fait le check :
[root@Virgo ~]# cat /etc/perso-wifi.sh
#!/bin/bash
INTF=wlp1s5
IP4=$(ip addr show dev $INTF scope global primary | grep -c "inet ")
IP6=$(ip addr show dev $INTF scope global primary | grep -c "inet6 ")
echo "IPv4 : $IP4 / IPv6 : $IP6"
if [ "$IP4" -lt "1" -o "$IP6" -lt "1" ]; then
nohup systemctl restart netctl-auto@$INTF.service >/dev/null 2>&1 &
fi
Il regarde les adresses de connectivité globale et primaire (il peut y en avoir plusieurs, surtout en IPv6 si use_tempaddr est utilisé, dans mon cas je veux que l'adresse principale soit présente) et compte leur nombre pour IPv4 et IPv6. Si il n'y en a pas pour une des connectivité, il y a un problème et le script demande au système de relancer la connexion sur cette interface (en fond de tache pour ne pas garder le la tache cron et sans interruption quand le cron quitte).
On active ensuite le service de cron :
systemctl enable cronie.service
systemctl start cronie.service
Puis on y ajoute le script créé qui sera exécuté toutes les 5 minutes :
[root@Virgo ~]# crontab -l
*/5 * * * * /etc/perso-wifi.sh
Et voila, la machine est normalement joignable sur ses 2 connexions même en cas d'échec.
Notez que je ne vérifie pas qu'internet est joignable (inutile de relancer la connexion si c'est la box qui fail) ni si la box est joignable (idem), juste qu'on nous a bien donné des adresses, ce qui n'est pas toujours le cas au reboot (wpa_supplicant se rate souvent), et qui fait perdre la main.