怎样制作免费的网站网络运营商
本文内容是通过脚本文件实现,所以适用于各种基于Linux内核的设备,包括但不限于 OpenWrt、CentOS等等
基于UPS供电的自动关机自动开机方案图
这个检测自动关机的规则,根据自己情况制定编写脚本即可
使用方法:
1、将本文脚本保存问 autowol.sh
2、在你需要触发脚本的场景,配置执行这个脚本
我的场景:目前有基于接市电的路由和服务器设备,计划在市电来电后(会触发路由器自动启动)由路由器自动执行脚本去唤醒多个服务器开机(因为一些原因我的服务器不能设置通电自启所以才借助WOL来开机)
3、使用脚本可以通过参数传递多个服务器IP和MAC、也可以固定环境变量配置,当然你也可以直接修改脚本固定目标服务器IP和MAC地址
注意实现:
1、脚本中的 etherwake 路径根据自己设备情况进行修改
2、脚本中的 INTERFACE 为发出广播的设备接口名称,也需要对应修改
3、脚本中的参数 INTERVAL 为两次检测和唤醒的间隔(单位秒)
4、脚本中的参数 NUMPACKAGE 为 ping 设备发送的包的数量
脚本内容如下:
#!/bin/sh########################################################################
# Author: shanhy/365384722@qq.com
# Parameter or environment variable, parameter > environment
# Variable ENV_HOST_LIST format
# example1: ENV_HOST_LIST=192.168.1.1-00:00:00:00:00:00,192.168.1.200-00:00:00:00:00:01
# example2: autowol.sh 192.168.1.1-00:00:00:00:00:00,192.168.1.200-00:00:00:00:00:01
########################################################################PARAM_HOST_LIST=$1
HOST_LIST=${PARAM_HOST_LIST:-$ENV_HOST_LIST}####################################INTERFACE=br-lan
INTERVAL=5
NUMPACKAGE=3# OpenWrt=/usr/bin/etherwake (opkg update && opkg install etherwake)
# CentOS=/usr/sbin/ether-wake (yum install -y net-tools)
WOL=/usr/bin/etherwake
LOGFILE="/tmp/wol.html"####################################echo "<meta http-equiv=\"refresh\" content=\"10\">" > $LOGFILE
echo "<br>AUTO WOL Script started at" `date` >> $LOGFILEif [ "$HOST_LIST" != "" ]; thenecho "<br>HOST_LIST=$HOST_LIST" >> $LOGFILE
elseecho "<br>Missing parameter or environment variable ENV_HOST_LIST" >> $LOGFILEexit 1
fi####################################wake_up () {while true; doTARGET_IP=$1TARGET_MAC=$2TARGET_INTERFACE=$3if ping -qc $NUMPACKAGE $TARGET_IP >/dev/null; thenecho "<br>NOWAKE $TARGET_MAC/$TARGET_IP was accessed and is already alive at" `date` >> $LOGFILEbreak;elseecho "<br>WAKE $TARGET_MAC/$TARGET_IP causes wake on lan at" `date` >> $LOGFILE$WOL -i $TARGET_INTERFACE $TARGET_MAC >> $LOGFILEsleep $INTERVALfidone
}####################################arr1=${HOST_LIST//,/ }
for var in $arr1
doarr2_str=${var//-/ }# Busybox does not support arrays. To be compatible with routing devices, the for loop mode is used here.i=0for var2 in $arr2_strdoif [ $i == 0 ]; thenIP=$var2elif [ $i == 1 ]; thenMAC=$var2elsebreakfilet i++done# echo $IP# echo $MACwake_up $IP $MAC $INTERFACE &
done
waitecho "<br>End of wake-on-lan" >> $LOGFILE
脚本中的 INTERFACE=br-lan 记得根据实际情况修改,这个 INTERFACE 是指你的网络接口名称,Linux 使用 ifconfig 可以查看,比如我是 CentOS7,我的 INTERFACE=eno1,也可能是 ens192 等,一般就是你插网线的那个网口的名称。
下面是我把脚本放到开机后自动执行触发的地方,如下示例:
[root@localhost rc.d]# chmod +x /etc/rc.d/rc.local
[root@localhost rc.d]# cat /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.sh /opt/auto/autowol.sh 192.168.1.11-14:18:77:e6:0u:b1,192.168.1.12-18:55:er:fb:11:48,192.168.1.13-84:2b:9j:43:3f:19touch /var/lock/subsys/local
[root@localhost rc.d]#
本文脚本经过测试也验证,请放心使用。如果你这边出现什么异常,请注意相关参数和细节做调整排除问题。
参考内容
(END)