脚本管理思路:
把所有的脚本都放到/config/scripts/下面,按功能建立文件夹,比如update-dnsmasq-config表示更新dnsmasq,里面有部分内容需要时时自动更新,部分内容仅在第一次更新,后续通过判断文件存在就不需要更新。最后在/config/scripts/下面建立一个总的脚本,运行一次搞定所有的脚本。
dnsmasq参考
http://community.ubnt.com/t5/Edg ... dnsmasq/td-p/454759,里面的patch已经不用打了,1.6版本直接支持
-----------------------------脚本实例-20141202重写------------------------------
#!/bin/bash
PATH=$PATH:$HOME/bin:/sbin:/usr/bin:/usr/sbin
ad_list_url="http://pgl.yoyo.org/adservers/serverlist.php?hostformat=dnsmasq&showintro=0&mimetype=plaintext"
#The IP address below should point to the IP of your router or to 0.0.0.0
pixelserv_ip="0.0.0.0"
#add conf-dir to dnsmasq.conf
if [ "`sudo /bin/cat /etc/dnsmasq.conf | grep conf-dir`" == "" ]
then
{
sudo su -c '/bin/echo "conf-dir=/etc/dnsmasq.d" >> /etc/dnsmasq.conf';
}
else
{
echo "no need to add conf-dir to dnsmasq.conf";
}
fi
ad_file="/etc/dnsmasq.d/dnsmasq.adlist.conf"
#temp_ad_file="/etc/dnsmasq.d/dnsmasq.adlist.conf.tmp"
temp_ad_file="/tmp/dnsmasq.adlist.conf.tmp"
curl -s $ad_list_url | sed "s/127\.0\.0\.1/$pixelserv_ip/" > $temp_ad_file
if [ -f "$temp_ad_file" ]
then
sudo mv -f $temp_ad_file $ad_file
else
echo "Error building the ad list, please try again."
exit
fi
#copy dnsmasq
if ( dnsmasq -v | grep -c 'ipset' | > /dev/null )
then
echo "dnsmasq qualified, no copy."
#return
else
sudo cp /usr/sbin/dnsmasq /usr/sbin/dnsmasq.bak
sudo cp -r -f /config/scripts/update-dnsmasq-config/'dnsmasq wit nosec' /usr/sbin/dnsmasq
sudo chmod 755 /usr/sbin/dnsmasq
fi
#copy dnsmasq dns config
if [ -f "/etc/dnsmasq.d/alldns.conf" ]
then
echo "alldns.conf exist, no copy."
#return
else
sudo cp /config/scripts/update-adblock-dnsmasq/alldns.conf /etc/dnsmasq.d/
fi
#copy dnsmasq adblock config
if [ -f "/etc/dnsmasq.d/mobileadblock.conf" ]
then
echo "alldns.conf exist, no copy."
#return
else
sudo cp /config/scripts/update-adblock-dnsmasq/mobileadblock.conf /etc/dnsmasq.d/
fi
#reload dnsmasq
sleep 1
sudo /etc/init.d/dnsmasq force-reload
------------------------------------------------------------------
自动更新通过crontab实现,传统的做法是crontab -e,然后输入命令,如果通过脚本,就不用这么繁琐了。
系统还支持schedule命令,但是最终还是回到crontab,而且支持的时间周期不灵活,还不如用crontab。
[20141125更新]添加、删除到crontab的脚本
参考
http://my.oschina.net/feedao/blog/140628--------------------------添加到crontab--------------------------------
#!/bin/sh
#version 0.1 date:20141125
BASEDIR=`dirname $0`/.
BASEDIR=`(cd "$BASEDIR"; pwd)`
#echo $BASEDIR
PROGRAM=$BASEDIR/update-dnsmasq-config.sh
DIRCRIPTION="#update-dnsmasq-config"
#其中0 表示键盘输入 1表示屏幕输出 2表示错误输出.把标准出错重定向到标准输出,
#然后扔到/DEV/NULL下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面。
#分 时 日 月 周 命令
CRONTAB_CMD="* 5 * * */1 sh $PROGRAM &> /dev/null 2>&1 &"
(crontab -l 2>/dev/null | grep -v $PROGRAM;echo $DIRCRIPTION ;echo "$CRONTAB_CMD") | crontab -
COUNT=`crontab -l | grep $PROGRAM | grep -v "grep"|wc -l `
if [ $COUNT -lt 1 ]; then
echo "fail to add crontab $PROGRAM" >$BASEDIR/erro
fi
-------------------------------从crontab删除脚本-----------------------------
#!/bin/sh
#version 0.1 date:20141125
BASEDIR=`dirname $0`/.
BASEDIR=`(cd "$BASEDIR"; pwd)`
PROGRAM=$BASEDIR/update-dnsmasq-config.sh
DIRCRIPTION="#update-dnsmasq-config"
#其中0 表示键盘输入 1表示屏幕输出 2表示错误输出.把标准出错重定向到标准输出,
#然后扔到/DEV/NULL下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面。
CRONTAB_CMD="* 5 * * */1 sh $PROGRAM &> /dev/null 2>&1 &"
(crontab -l 2>/dev/null | egrep -v "$PROGRAM|$DIRCRIPTION|$CRONTAB_CMD") | crontab -
COUNT=`crontab -l | grep $PROGRAM | grep -v "grep"|wc -l `
if [ $COUNT -eq 1 ]; then
echo "fail to del crontab $PROGRAM"
fi
---------------------------------------------------------
网络唤醒的实现:
1、windows下实现唤醒脚本
windows下建立一个目录,然后下载一个WolCmd.exe放到目录里面,建立一个wol.bat
内容格式如下wolcmd 00:19:db:83:71:93 YYY.changeip.org 255.255.255.255 7000
2、路由器绑定arp
arp系统绑定脚本
#!/bin/bash
currentdir=$(cd "$(dirname "$0")"; pwd)
/usr/sbin/arp -f $currentdir/ip-mac
在/config/scripts/wakeonlan下面建立一个ip-mac的文本文件,内容如下:
192.168.1.12 00:19:db:83:71:93
---------------------------------------------------------
3、路由器设置dhcp固定ip的脚本
#!/bin/bash
run=/opt/vyatta/sbin/vyatta-cfg-cmd-wrapper
/opt/vyatta/sbin/vyatta-cfg-cmd-wrapper begin
$run set service dhcp-server shared-network-name dhcp0 subnet 192.168.1.0/24 static-mapping gigawired ip-address 192.168.1.12
$run set service dhcp-server shared-network-name dhcp0 subnet 192.168.1.0/24 static-mapping gigawired mac-address 00:19:db:83:71:93
$run commit
$run save
exit
---------------------------------------------------------
4、路由器设置端口转发的脚本---20150703更新,1.6测试可用
#!/bin/bash
#wan=pppoe0
lanip=192.168.1.12
run=/opt/vyatta/sbin/vyatta-cfg-cmd-wrapper
/opt/vyatta/sbin/vyatta-cfg-cmd-wrapper begin
#echo "step 1 sucess"
$run set port-forward rule 1 description "wake_on_lan_gigawired"
$run set port-forward rule 1 forward-to address 192.168.1.12
$run set port-forward rule 1 forward-to port 7
$run set port-forward rule 1 original-port 7000
$run set port-forward rule 1 protocol udp
$run commit
$run save
exit