#!/usr/bin/env python3 from datetime import datetime from ipaddress import ip_address from subprocess import run from sys import exit import netifaces now = int(datetime.timestamp(datetime.utcnow())) try: with open('/var/tmp/pppd-last-restart.status', 'r') as f: last_restart = int(f.read().strip()) except: last_restart = 0 if now-3600 < last_restart: exit(0) ifaces = set() for i in netifaces.interfaces(): if i.startswith('ppp'): ifaces.add(i) system_has_public_ip = False for iface in ifaces: for type in [netifaces.AF_INET, netifaces.AF_INET6]: try: ips = netifaces.ifaddresses(iface)[type] except KeyError: continue for ip in ips: try: addr = ip_address(ip['addr']) if not addr.is_private and not addr.is_loopback: system_has_public_ip = True except Exception: # Apparently not an ip pass if not system_has_public_ip: run(['systemctl', 'restart', 'pppoe']) with open('/var/tmp/pppd-last-restart.status', 'w') as f: f.write(str(now)) print('pppoe.service has been restarted')