ddns-scripts: Introduce retry_interval option to periodically retry DDNS update,...
authorVasilis Tsiligiannis <acinonyx@openwrt.gr>
Tue, 31 Jan 2012 20:00:02 +0000 (20:00 +0000)
committerVasilis Tsiligiannis <acinonyx@openwrt.gr>
Tue, 31 Jan 2012 20:00:02 +0000 (20:00 +0000)
SVN-Revision: 29977

net/ddns-scripts/files/etc/config/ddns
net/ddns-scripts/files/usr/lib/ddns/dynamic_dns_updater.sh

index db84aaeeab172880ac25037e6fa7c61be89a3b08..4784c8248828006bfe203cd3c3aab1cdf040ab01 100644 (file)
 # it) and how often we need to force an update ( many services
 # will expire your domain if you don't connect and do an update
 # every so often).  Use the "check_interval" to specify how
-# often to check whether an update is necessary, and the 
-# "force_interval" option to specify how often to force an
-# update.  Specify the units for these values with the "check_unit"
-# and the "force_unit" options.  Units can be "days", "hours",
-# "minutes" or "seconds".  The default force_unit is hours and the
-# default check_unit is seconds.  The default check_interval is
-# 600 seconds, or ten minutes.  The default force_interval is 
-# 72 hours or 3 days.
+# often to check whether an update is necessary, the "retry_interval"
+# to specify how often to retry in case the update has failed, and
+# the "force_interval" option to specify how often to force an
+# update.  Specify the units for these values with the "check_unit",
+# the "retry_init" and the "force_unit" options.  Units can be
+# "days", "hours", "minutes" or "seconds".  The default force_unit
+# is hours, the default retry_unit is seconds and the default
+# check_unit is seconds.  The default check_interval is 600 seconds,
+# or ten minutes.  The default retry_interval is 60 seconds, or one
+# minute. The default force_interval is 72 hours or 3 days.
 #
 #
 #########################################################
@@ -77,6 +79,8 @@ config service "myddns"
        option force_unit       "hours"
        option check_interval   "10"
        option check_unit       "minutes"
+       option retry_interval   "60"
+       option retry_unit       "seconds"
 
        #option ip_source       "interface"
        #option ip_interface    "eth0.1"
index e8e08e72062612d6dc7c3ca7a9958bb87656a438..d1f8460bfcccda1fcce9dfee7c162d00f3b3db98 100755 (executable)
@@ -68,6 +68,11 @@ then
        check_interval=600
 fi
 
+if [ -z "$retry_interval" ]
+then
+       retry_interval=60
+fi
+
 if [ -z "$check_unit" ]
 then
        check_unit="seconds"
@@ -203,6 +208,28 @@ esac
 
 
 
+#compute retry interval in seconds
+case "$retry_unit" in
+       "days" )
+               retry_interval_seconds=$(($retry_interval*60*60*24))
+               ;;
+       "hours" )
+               retry_interval_seconds=$(($retry_interval*60*60))
+               ;;
+       "minutes" )
+               retry_interval_seconds=$(($retry_interval*60))
+               ;;
+       "seconds" )
+               retry_interval_seconds=$retry_interval
+               ;;
+       * )
+               #default is seconds
+               retry_interval_seconds=$retry_interval
+               ;;
+esac
+
+
+
 verbose_echo "force seconds = $force_interval_seconds"
 verbose_echo "check seconds = $check_interval_seconds"
 
@@ -289,6 +316,12 @@ do
 
                #here we actually connect, and perform the update
                update_output=$( $retrieve_prog "$final_url" )
+               if [ $? -gt 0 ]
+               then
+                       verbose_echo "update failed"
+                       sleep $retry_interval_seconds
+                       continue
+               fi
 
                verbose_echo "Update Output:"
                verbose_echo "$update_output"