Bazen tuhaf tuhaf işlere ihtiyaç duyuyorum. Bu script de onlardan bir tanesi. Yaptığı iş son derece basit. Belki bunu yapamanın daha doğru bir yolu vardır ama aramak için vakit bulamadım ve bu scripti yazdım.

İki farklı router mevcut ve biri ortadan kaybolursa sunucunun diğeri ile devam etmesi gerekliliği ortaya çıktı. Aşağıdaki script Ubuntu 16.04 üzerinde çalışıyor ve herhangi bir problem çıkarmadı. Bir cron ile çalıştırabilirsiniz.

import os
import subprocess
import re

def pingGW (gw):
	try:
		output = subprocess.check_output("ping -c 3 "+gw, shell=True)
	except Exception, e:
		return False
	return True
def findIP (routing_table, ip):
	result = re.findall('\\b'+ip+'\\b', routing_table, flags=re.IGNORECASE)
	if len(result) > 0:
		return True
	else:
		return False

# Check maingw
maingw = "172.22.25.1"
maingw_response = pingGW(maingw)

# Check backupgw
backupgw = "172.22.25.2"
backupgw_response = pingGW(backupgw)

# Fetch routing table
route_table = os.popen("/sbin/ip route show").read()

# If maingw is down and backupgw is up, switch to backupgw
if (maingw_response == False ) and (backupgw_response == True):
	# Switch to backupgw
	if findIP(route_table,backupgw) == False:
		os.system("/sbin/ip route del default")
		os.system("/sbin/ip route add default via %s" % backupgw)
if maingw_response == True:
	# Switch to maingw
        if findIP(route_table,maingw) == False:
		os.system("/sbin/ip route del default")
		os.system("/sbin/ip route add default via %s" % maingw)