#!/usr/bin/lua require "os" require "io" require "uci" local fs = require "nixio.fs" if fs.access("/var/run/olsrd.pid") or fs.access("/var/run/olsrd4.pid") then local stamp, intv local x = uci.cursor() x:foreach("olsrd", "LoadPlugin", function(s) if s.library == "olsrd_watchdog" then if s.ignore == "1" then do return end end intv = tonumber(s.interval) stamp = s.file end end) if intv and fs.access(stamp) then local systime = os.time() local wdgtime = tonumber(io.lines(stamp)()) if not wdgtime or ( systime - wdgtime ) > ( intv * 2 ) then os.execute("logger -t 'OLSR watchdog' 'Process died - restarting!'") local tnls = io.popen("ip tunnel show | cut -d : -f 1") while true do tnl = tnls:read("*line") if tnl == nil then break end if string.find(tnl, "tnl_") == 1 then os.execute(string.format("logger -t 'OLSR watchdog' 'Deleting stale tunnel %s'", tnl)) os.execute(string.format("ip link del %s", tnl)) end end os.execute("/etc/init.d/olsrd restart") end end end