Need help with rc.d script
Ernie Luzar
luzar722 at gmail.com
Mon Nov 6 23:32:20 UTC 2017
I wrote this sh script today for dynamic dns ip updates.
When I use service dynip start command it just hangs there.
Need pointer to what I am doing wrong.
Here are the 2 scripts in question:
Script started on Mon Nov 6 18:19:18 2017
/root/bin >cat /usr/local/bin/dynip
#!/bin/sh
#
# Script to update the dynamic DNS pointer at your dynamic DNS
hosting site.
# This script runs continually and on a user defined timed cycle will
# check the dynamic ip address of the interface facing the public
internet
# to determin if it has changed. If it has changed the browser URL format
# is used to update the DNS pointer IP address at the dynamic DNS
hosting
# site that is hosting your Fully qualified domain to the newly changed
# ip address.
#
# The default browser URL format being used is for NameCheap
(namecheap.com).
# NOTE: Most DNS hosting sites that provide dynamic DNS services use a
# variation of the default browser URL format used here. A simple user
# substitution to the "wget" command for the browser URL format used
by your
# dynamic DNS hosting site will allow this script to work for you.
prev_ip_file="/usr/local/etc/dynip"
# Cycle time to wait between ip checks.
#elapse_time="7200" # 7200 seconds = 2 hours
#elapse_time="3600" # 3600 seconds = 1 hour
#elapse_time="1800" # 1800 seconds = 30 minutes
#elapse_time="900" # 1800 seconds = 15 minutes
#elapse_time="600" # 600 seconds = 10 minutes
#elapse_time="300" # 300 seconds = 5 minutes
elapse_time="10"
# Find the NIC device name of the NIC connected to the public internet.
# The default interface obtained from route command is the one connected
# to the public internet.
#
nic_devicename="$(route get -inet default 2> /dev/null | \
grep -o "interface.*" | cut -d ' ' -f 2)"
##echo "nic_devicename = ${nic_devicename}"
# Get the IP address assigned to that NIC device name.
#
nic_ip="$(ifconfig $nic_devicename inet | \
grep -o "inet.*" | cut -d ' ' -f 2)"
#echo "nic_ip1 = ${nic_ip}"
# On start up get the last recorded ip address in use and populate
variable
# with its value.
#
if [ -f "${prev_ip_file}" ]; then
prev_ip="$(cat ${prev_ip_file})"
else
prev_ip="0.0.0.0"
echo "${prev_ip}" > ${prev_ip_file}
fi
#echo "prev_ip = $prev_ip"
# This is the continuous loop checking the current ip address to
# to determin if it changed.
while [ 1 ]; do
# Get the IP address assigned to that NIC device name.
nic_ip="$(ifconfig $nic_devicename inet | \
grep -o "inet.*" | cut -d ' ' -f 2)"
#echo "nic_ip2 = ${nic_ip}"
if [ "${prev_ip}" != "${nic_ip}" ]; then
# Update dynamic DNS hosting site with new ip address.
website="https://dynamicdns.park-your-domain.com/update?"
dyn_host="host=home-fbsd&domain=host.xxxxxxx.com"
password="&password=a3e0ffc2274746b29ceaf126d59e51c1"
url="$website$dyn_host$password"
#echo "$url"
/usr/local/bin/wget -O /var/log/namecheap.dynip.update.log -q "$url"
#echo "rtn-code = $?"
if [ $? -ne 0 ]; then
echo "Error: /usr/local/bin/wget command failed."
exit 3
fi
#echo "${nic_ip}" > ${prev_ip_file}
prev_ip="${nic_ip}"
fi
sleep ${elapse_time}
done
/root/bin cat /usr/local/etc/rc.d/dynip
#!/bin/sh
#
#
# PROVIDE: dynip
# REQUIRE: LOGIN
# KEYWORD: shutdown
#
# Add the following line to /etc/rc.conf to enable dynip:
#
# dynip_enable="YES"
#
. /etc/rc.subr
name=dynip
rcvar=dynip_enable
command="/usr/local/bin/${name}"
run_rc_command "$1"
More information about the freebsd-questions
mailing list