emergency remote access
emergency remote access
Adjust interval as needed.
Or if you want something a bit faster and less disruptive:
#!/bin/sh NAME="$0" logger_cmd () { echo $@ logger -p daemon.info -t "$NAME[$$]" $@ } if ! which ncat 1>/dev/null then logger_cmd "ncat not found, installing..." opkg update && opkg install ncat fi chk_conn () { echo "Checking connectivity to $@" if ncat --send-only --recv-only -w 334ms $@ 2>/dev/null; then return 0 fi logger_cmd "Cannot reach $@" return 1 } restart_network_iface() { # TODO: Don't restart every minute COOLDOWN_LOCK=/tmp/internet-connectivity-watchcat.tmp COOLDOWN_SECONDS=300 cooldown_time_end=$(cat $COOLDOWN_LOCK || echo 0) time_now="$(cat /proc/uptime)" time_now="${time_now%%.*}" cooldown_time_left=$((cooldown_time_end - time_now)) if [ "$cooldown_time_left" -lt "1" ] then logger_cmd "Restarting network interface: \"$1\"." ifdown "$1" ifup "$1" cooldown_time_end=$((time_now + COOLDOWN_SECONDS)) echo $cooldown_time_end > $COOLDOWN_LOCK else logger_cmd "Skipping interface \"$1\" restart due to cooldown. Cooldown left: $cooldown_time_left seconds" fi } logger_cmd "Checking internet connectivity..." if chk_conn google.com 443 \ || chk_conn amazon.com 443 \ || chk_conn facebook.com 443 \ || chk_conn cloudflare.com 443 \ || chk_conn telekom.de 443 then logger_cmd "Connected to internet." else logger_cmd "Not connected to internet." restart_network_iface "$1" fiIn restart_network_iface use /usr/sbin/reboot instead of interface up/down and run the script every few minutes via cron or systemd timer. This was written for OpenWrt so if you use that you can use it as-is. For other systems you’d also have to adjust the logger_cmd.
You can place that on another machine and send a signal to a smart plug instead if you’re worried of a locked up / frozen router. That said if your router freezes like that, you should probably change it and you should be able to run this script on it.