diff --git a/package/ctcgfw/luci-app-serverchan/Makefile b/package/ctcgfw/luci-app-serverchan/Makefile index 9b74a174f8..e73464a3c1 100644 --- a/package/ctcgfw/luci-app-serverchan/Makefile +++ b/package/ctcgfw/luci-app-serverchan/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-serverchan -PKG_VERSION:=1.39 +PKG_VERSION:=1.41 PKG_RELEASE:=5 include $(INCLUDE_DIR)/package.mk @@ -28,11 +28,10 @@ define Package/$(PKG_NAME)/conffiles endef define Package/$(PKG_NAME)/install - $(INSTALL_DIR) $(1)/etc/init.d $(1)/etc/uci-defaults $(1)/usr/bin/serverchan $(1)/etc/config $(1)/usr/lib/lua/luci + $(INSTALL_DIR) $(1)/etc/init.d $(1)/usr/bin/serverchan $(1)/etc/config $(1)/usr/lib/lua/luci $(CP) ./luasrc/* $(1)/usr/lib/lua/luci $(INSTALL_CONF) ./root/etc/config/serverchan $(1)/etc/config $(INSTALL_BIN) ./root/etc/init.d/serverchan $(1)/etc/init.d - $(INSTALL_BIN) ./root/etc/uci-defaults/luci-serverchan $(1)/etc/uci-defaults $(INSTALL_BIN) ./root/usr/bin/serverchan/serverchan $(1)/usr/bin/serverchan endef diff --git a/package/ctcgfw/luci-app-serverchan/luasrc/model/cbi/serverchan.lua b/package/ctcgfw/luci-app-serverchan/luasrc/model/cbi/serverchan.lua index 528e96c396..12e986265e 100644 --- a/package/ctcgfw/luci-app-serverchan/luasrc/model/cbi/serverchan.lua +++ b/package/ctcgfw/luci-app-serverchan/luasrc/model/cbi/serverchan.lua @@ -65,6 +65,8 @@ e.write=function(e,e,e) end e=s:taboption("log", Button,translate("")) +e:depends({debuglevel="1"}) +e:depends({debuglevel="2"}) e.inputtitle=translate("清理日志") e.inputstyle = "clean_log" function e.write(self, section) @@ -133,15 +135,15 @@ a=s:taboption("tab_basic2", Flag,"cpuload_enable",translate("CPU 负载报警")) a.default=0 a.rmempty=true a= s:taboption("tab_basic2", Value, "cpuload", "负载报警阈值") +a.default = "3.0" a.rmempty = true -a.placeholder = "2.0" a:depends({cpuload_enable="1"}) a=s:taboption("tab_basic2", Flag,"temperature_enable",translate("CPU 温度报警")) a.default=0 a.rmempty=true a= s:taboption("tab_basic2", Value, "temperature", "温度报警阈值") a.rmempty = true -a.placeholder = "80" +a.default = "80" a:depends({temperature_enable="1"}) a.description = translate("
设备报警只会在连续五分钟超过设定值时才会推送
而且一个小时内不会再提醒第二次") diff --git a/package/ctcgfw/luci-app-serverchan/root/etc/config/serverchan b/package/ctcgfw/luci-app-serverchan/root/etc/config/serverchan index b7d3df739c..836aff6460 100644 --- a/package/ctcgfw/luci-app-serverchan/root/etc/config/serverchan +++ b/package/ctcgfw/luci-app-serverchan/root/etc/config/serverchan @@ -1,19 +1,14 @@ config serverchan 'serverchan' - option serverchan_ip '1' - option serverchan_down '1' - option serverchan_sleeptime '60' - option sheep_enabled '1' - option temp_mask '1' - option cpuload_enable '1' - option temperature_enable '1' - option serverchan_ipv6 '0' - option serverchan_sheep '0' - option cpuload '2' - option send_enable '0' option serverchan_enable '0' + option sleeptime '60' option serverchan_ipv4 '0' - option serverchan_up '1' + option serverchan_ipv6 '0' + option serverchan_up '0' + option serverchan_down '0' + option cpuload_enable '0' + option temperature_enable '0' option up_timeout '2' option down_timeout '10' + option serverchan_sheep '0' diff --git a/package/ctcgfw/luci-app-serverchan/root/etc/init.d/serverchan b/package/ctcgfw/luci-app-serverchan/root/etc/init.d/serverchan index a6ed99aa7f..e2770eaec7 100755 --- a/package/ctcgfw/luci-app-serverchan/root/etc/init.d/serverchan +++ b/package/ctcgfw/luci-app-serverchan/root/etc/init.d/serverchan @@ -1,8 +1,8 @@ #!/bin/sh /etc/rc.common + START=99 STOP=10 - start() { flag=$(ps | grep "serverchan/serverchan" | grep -v "grep" | wc -l) if [ $flag -eq 0 ] ;then @@ -12,7 +12,6 @@ else fi enable=$(uci get serverchan.serverchan.serverchan_enable) if [ $enable -eq 1 ]; then - echo "enable" kill -9 $(ps | grep serverchan/serverchan | grep -v "grep" | awk '{print $1}') >/dev/null 2>&1 sleep 1 nohup /usr/bin/serverchan/serverchan 2>&1 & @@ -23,7 +22,6 @@ stop() { kill -9 `pgrep -f serverchan/serverchan` enable=$(uci get serverchan.serverchan.serverchan_enable) if [ $enable -ne 1 ]; then - echo 'stop!' kill $(pidof serverchan) >/dev/null 2>&1 kill -9 $(ps | grep serverchan | grep -v "grep" | awk '{print $1}') >/dev/null 2>&1 fi @@ -33,5 +31,4 @@ restart(){ stop sleep 1 start - echo "restarted." } diff --git a/package/ctcgfw/luci-app-serverchan/root/etc/uci-defaults/luci-serverchan b/package/ctcgfw/luci-app-serverchan/root/etc/uci-defaults/luci-serverchan deleted file mode 100644 index 3ed2a3749e..0000000000 --- a/package/ctcgfw/luci-app-serverchan/root/etc/uci-defaults/luci-serverchan +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -touch /etc/config/serverchan - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@serverchan[-1] - add ucitrack serverchan - set ucitrack.@serverchan[-1].init=serverchan - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/package/ctcgfw/luci-app-serverchan/root/usr/bin/serverchan/serverchan b/package/ctcgfw/luci-app-serverchan/root/usr/bin/serverchan/serverchan index 4b0a296a3a..3a15e17df8 100755 --- a/package/ctcgfw/luci-app-serverchan/root/usr/bin/serverchan/serverchan +++ b/package/ctcgfw/luci-app-serverchan/root/usr/bin/serverchan/serverchan @@ -1,16 +1,18 @@ #!/bin/sh +# 等待 2s,确保 luci 设置已保存 +sleep 2 + # 读取设置文件 function get_config(){ if [ "$1" ] ;then - serverchan_config=`uci show serverchan` - if ( echo $serverchan_config | grep -q -i $1 ); then echo `uci get serverchan.serverchan.$1`;else echo "" >/dev/null;fi + uci get serverchan.serverchan.$1 2>/dev/null fi } +# 初始化设置信息 function read_config(){ - debuglevel=`get_config debuglevel` - if [ -z "$debuglevel" ] ; then logfile="/dev/null";else logfile="/tmp/serverchan/serverchan.log";fi + debuglevel=`get_config debuglevel` && if [ -z "$debuglevel" ] ; then logfile="/dev/null";else logfile="/tmp/serverchan/serverchan.log";fi serverchan_enable=`get_config serverchan_enable` serverchan_sckey=`get_config sckey` serverchan_ipv4=`get_config serverchan_ipv4` @@ -21,101 +23,80 @@ function read_config(){ ipv6_URL=`get_config ipv6_URL` serverchan_up=`get_config serverchan_up` serverchan_down=`get_config serverchan_down` - serverchan_sheep=`get_config serverchan_sheep` - if [ -z "$serverchan_sheep" ] ; then serverchan_sheep="0";fi + serverchan_sheep=`get_config serverchan_sheep` && if [ -z "$serverchan_sheep" ] ; then serverchan_sheep="0";fi serverchan_whitelist=`get_config serverchan_whitelist` serverchan_blacklist=`get_config serverchan_blacklist` serverchan_interface=`get_config serverchan_interface` - device_aliases=`get_config device_aliases` - if [ ! -z "$device_aliases" ] ; then device_aliases=`echo $device_aliases | sed 's/ /\n/g' | sed 's/-/ /g'`;fi + device_aliases=`get_config device_aliases` && if [ ! -z "$device_aliases" ] ; then device_aliases=`echo $device_aliases | sed 's/ /\n/g' | sed 's/-/ /g'`;fi starttime=`get_config starttime` endtime=`get_config endtime` - sleeptime=`get_config sleeptime` - if [ -z "$sleeptime" ] ; then sleeptime="60";fi + sleeptime=`get_config sleeptime` && if [ -z "$sleeptime" ] ; then sleeptime="60";fi cpuload_enable=`get_config cpuload_enable` cpuload=`get_config cpuload` temperature_enable=`get_config temperature_enable` temperature=`get_config temperature` device_name=`get_config device_name` - dir="/tmp/serverchan/" - up_timeout=`get_config up_timeout` - if [ -z "$up_timeout" ] ; then up_timeout="2";fi - down_timeout=`get_config down_timeout` - if [ -z "$down_timeout" ] ; then down_timeout="10";fi + dir="/tmp/serverchan/" && mkdir -p ${dir} + up_timeout=`get_config up_timeout` && if [ -z "$up_timeout" ] ; then up_timeout="2";fi + down_timeout=`get_config down_timeout` && if [ -z "$down_timeout" ] ; then down_timeout="10";fi } -# 等待 2s,确保 luci 设置已保存 -sleep 2 -read_config - # 检测程序开关 function enable_detection(){ if [ "$1" ] ;then for i in `seq 1 $1` do serverchan_enable=`get_config serverchan_enable` - if [ -z "$serverchan_enable" ] || [ "$serverchan_enable" -eq "0" ] ; then kill -9 `pgrep -f /usr/bin/serverchan/serverchan`;fi + if [ -z "$serverchan_enable" ] || [ "$serverchan_enable" -eq "0" ] ; then `/etc/init.d/serverchan stop`;fi sleep 1 done else serverchan_enable=`get_config serverchan_enable` - if [ -z "$serverchan_enable" ] || [ "$serverchan_enable" -eq "0" ] ; then kill -9 `pgrep -f /usr/bin/serverchan/serverchan`;fi + if [ -z "$serverchan_enable" ] || [ "$serverchan_enable" -eq "0" ] ; then `/etc/init.d/serverchan stop`;fi fi } # 初始化 function serverchan_init(){ -if [ -z "$serverchan_enable" ] || [ "$serverchan_enable" -eq "0" ] ; then exit;fi -if [ -z "$serverchan_enable" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取程序开关 " >> ${logfile};fi -if [ -z "$serverchan_sckey" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取 SCKEY" >> ${logfile};fi -if [ -z "$serverchan_sckey" ] && [ "${#serverchan_sckey}" -lt "50" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】请填入正确的 SCKEY " >> ${logfile};fi -if [ -z "$serverchan_sckey" ] && [ "${#serverchan_sckey}" -lt "50" ] ; then exit;fi -if [ -z "$serverchan_ipv4" ] || [ "$serverchan_ipv4" -ne "0" ] && [ "$serverchan_ipv4" -ne "1" ] && [ "$serverchan_ipv4" -ne "2" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取 ipv4 变化通知 开关" >> ${logfile};fi -if [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "1" ] && [ -z "$ipv4_interface" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取 ipv4 IP 接口信息" >> ${logfile};fi -if [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "2" ] && [ -z "$ipv4_URL" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取 ipv4 IP URL信息" >> ${logfile};fi -if [ -z "$serverchan_ipv6" ] || [ "$serverchan_ipv6" -ne "0" ] && [ "$serverchan_ipv6" -ne "1" ] && [ "$serverchan_ipv6" -ne "2" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取 ipv6 变化通知 开关" >> ${logfile};fi -if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "1" ] && [ -z "$ipv6_interface" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取 ipv6 IP 接口信息" >> ${logfile};fi -if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "2" ] && [ -z "$ipv6_URL" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取 ipv6 IP URL信息" >> ${logfile};fi -if [ -z "$serverchan_up" ] || [ "$serverchan_up" -ne "0" ] && [ "$serverchan_up" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取 设备上线提醒 开关" >> ${logfile};fi -if [ -z "$serverchan_down" ] || [ "$serverchan_down" -ne "0" ] && [ "$serverchan_down" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取 设备下线提醒 开关" >> ${logfile};fi -mkdir -p ${dir} -network_enable="200" -rm -f ${dir}title >/dev/null 2>&1 -rm -f ${dir}content >/dev/null 2>&1 -rm -f ${dir}serverchan.lock >/dev/null 2>&1 -send_enable=0 -echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】载入配置文件" >> ${logfile} -if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】工作目录为 $dir " >> ${logfile};fi -if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】log 目录为 $logfile " >> ${logfile};fi - -# 如果 “忽略列表 为空” 并且 “关注列表为空” -if [ -z "$serverchan_whitelist" ] && [ -z "$serverchan_blacklist" ] && [ -z "$serverchan_interface" ]; then - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】未启用 MAC 过滤" >> ${logfile};fi - -# 如果 “忽略列表不为空” -elif [ ! -z "$serverchan_whitelist" ] ; then - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】忽略列表内设备" >> ${logfile};fi - -# 如果 “关注列表不为空” -elif [ ! -z "$serverchan_blacklist" ] ; then - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】仅关注列表内设备" >> ${logfile};fi - -# 如果 “仅关注接口选项打开” -elif [ ! -z "$serverchan_interface" ] ; then - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】仅关注接口内设备" >> ${logfile};fi -fi + deltemp + rm -f ${dir}usage.db >/dev/null 2>&1 + uci set serverchan.serverchan.send_enable=0 + uci commit serverchan + echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】载入配置文件" >> ${logfile} + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】工作目录为 $dir " >> ${logfile};fi + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】log 目录为 $logfile " >> ${logfile};fi + if [ -z "$serverchan_enable" ] || [ "$serverchan_enable" -eq "0" ] ; then exit;fi + if [ -z "$serverchan_sckey" ] || [ "${#serverchan_sckey}" -lt "50" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】请填入正确的 SCKEY " >> ${logfile};fi + if [ -z "$serverchan_sckey" ] && [ "${#serverchan_sckey}" -lt "50" ] ; then exit;fi + if [ -z "$serverchan_ipv4" ] || [ "$serverchan_ipv4" -ne "0" ] && [ "$serverchan_ipv4" -ne "1" ] && [ "$serverchan_ipv4" -ne "2" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取 ipv4 变化通知 开关" >> ${logfile};fi + if [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "1" ] && [ -z "$ipv4_interface" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取 ipv4 IP 接口信息" >> ${logfile};fi + if [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "2" ] && [ -z "$ipv4_URL" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取 ipv4 IP URL信息" >> ${logfile};fi + if [ -z "$serverchan_ipv6" ] || [ "$serverchan_ipv6" -ne "0" ] && [ "$serverchan_ipv6" -ne "1" ] && [ "$serverchan_ipv6" -ne "2" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取 ipv6 变化通知 开关" >> ${logfile};fi + if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "1" ] && [ -z "$ipv6_interface" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取 ipv6 IP 接口信息" >> ${logfile};fi + if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "2" ] && [ -z "$ipv6_URL" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取 ipv6 IP URL信息" >> ${logfile};fi + if [ -z "$serverchan_up" ] || [ "$serverchan_up" -ne "0" ] && [ "$serverchan_up" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取 设备上线提醒 开关" >> ${logfile};fi + if [ -z "$serverchan_down" ] || [ "$serverchan_down" -ne "0" ] && [ "$serverchan_down" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取 设备下线提醒 开关" >> ${logfile};fi + if [ -z "$serverchan_whitelist" ] && [ -z "$serverchan_blacklist" ] && [ -z "$serverchan_interface" ]; then + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】未启用 MAC 过滤" >> ${logfile};fi + elif [ ! -z "$serverchan_whitelist" ] ; then + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】忽略列表内设备" >> ${logfile};fi + elif [ ! -z "$serverchan_blacklist" ] ; then + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】仅关注列表内设备" >> ${logfile};fi + elif [ ! -z "$serverchan_interface" ] ; then + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】仅关注接口内设备" >> ${logfile};fi + fi } # 创建计划任务 function serverchan_cron(){ - send_mode=`get_config send_mode` + local send_mode=`get_config send_mode` if [ ! -z "$send_mode" ] ; then - regular_time=`get_config regular_time` - regular_time_2=`get_config regular_time_2` - regular_time_3=`get_config regular_time_3` - if [ ! -z "$regular_time_2" ] ; then regular_time_2=,${regular_time_2};fi - if [ ! -z "$regular_time_3" ] ; then regular_time_3=,${regular_time_3};fi - interval_time=`get_config interval_time` + local regular_time=`get_config regular_time` + local regular_time_2=`get_config regular_time_2` + local regular_time_3=`get_config regular_time_3` + if [ ! -z "$regular_time_2" ] ; then local regular_time_2=,${regular_time_2};fi + if [ ! -z "$regular_time_3" ] ; then local regular_time_3=,${regular_time_3};fi + local interval_time=`get_config interval_time` # 定时发送 if [ ! -z "$regular_time" ] || [ ! -z "$regular_time_2" ] || [ ! -z "$regular_time_3" ] ; then @@ -125,7 +106,7 @@ function serverchan_cron(){ crontab -l > conf && sed -i "/serverchan/d" conf && crontab conf && rm -f conf >/dev/null 2>&1 crontab -l > conf && echo -e "0 $regular_time$regular_time_2$regular_time_3 * * * /usr/bin/serverchan/serverchan send &" >> conf && crontab conf && rm -f conf >/dev/null 2>&1 else - crontab -l > conf && echo -e "0 $regular_time * * * /usr/bin/serverchan/serverchan send &" >> conf && crontab conf && rm -f conf >/dev/null 2>&1 + crontab -l > conf && echo -e "0 $regular_time$regular_time_2$regular_time_3 * * * /usr/bin/serverchan/serverchan send &" >> conf && crontab conf && rm -f conf >/dev/null 2>&1 fi # 间隔发送 elif [ ! -z "$interval_time" ] ; then @@ -145,101 +126,71 @@ function serverchan_cron(){ fi /etc/init.d/cron stop /etc/init.d/cron start - } - # 免打扰检测 function serverchan_disturb(){ - if [ ! -z "$serverchan_sheep" ] && [ "$serverchan_sheep" -eq "1" ] && [ ! -z "$starttime" ] && [ ! -z "$endtime" ] ;then - if [ `date +%H` -ge $endtime -a $starttime -lt $endtime ] || [ `date +%H` -lt $starttime -a $starttime -lt $endtime ] || [ `date +%H` -lt $starttime -a `date +%H` -ge $endtime -a $starttime -gt $endtime ] ; then enable=1;else enable=0;fi - + if [ ! -z "$serverchan_sheep" ] && [ ! -z "$starttime" ] && [ ! -z "$endtime" ] ;then + if [ `date +%H` -ge $endtime -a $starttime -lt $endtime ] || [ `date +%H` -lt $starttime -a $starttime -lt $endtime ] || [ `date +%H` -lt $starttime -a `date +%H` -ge $endtime -a $starttime -gt $endtime ] ; then local enable=1;else local enable=0;fi + if [ "$enable" -eq "0" ] ;then - sheep_str=0 - while [ $enable -eq "0" ] ; - do - if [ "$sheep_str" -eq "0" ] ; then - echo "`date "+%Y-%m-%d %H:%M:%S"` 【免打扰】夜深了,该休息了" >> ${logfile} - sheep_str=1 - fi - read_config - if [ `date +%H` -ge $endtime -a $starttime -lt $endtime ] || [ `date +%H` -lt $starttime -a $starttime -lt $endtime ] || [ `date +%H` -lt $starttime -a `date +%H` -ge $endtime -a $starttime -gt $endtime ] ; then - enable=1 - else - enable=0 - enable_detection 1 - fi - continue - done - unset title - unset content - rm -f ${dir}title >/dev/null 2>&1 - rm -f ${dir}content >/dev/null 2>&1 + if [ "$serverchan_sheep" -eq "1" ] ;then + local sheep_str=0 + while [ $enable -eq "0" ] ; + do + if [ "$sheep_str" -eq "0" ] ; then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【免打扰】夜深了,该休息了" >> ${logfile} + local sheep_str=1 + fi + if [ `date +%H` -ge $endtime -a $starttime -lt $endtime ] || [ `date +%H` -lt $starttime -a $starttime -lt $endtime ] || [ `date +%H` -lt $starttime -a `date +%H` -ge $endtime -a $starttime -gt $endtime ] ; then + local enable=1 + else + local enable=0 + enable_detection 1 + fi + continue + done + elif [ "$serverchan_sheep" -eq "2" ] ;then + echo 0 + return + fi + fi + fi + echo 1 +} + +# 文件锁 +function LockFile(){ + if [ "$1" ] ;then + if [ $1 = "lock" ] ;then + if [ ! -f "${dir}serverchan.lock" ] ; then + > ${dir}serverchan.lock + else + while [ -f "${dir}serverchan.lock" ] ; + do + continue + done + LockFile lock + fi + fi + if [ $1 = "unlock" ] ;then + rm -f ${dir}serverchan.lock >/dev/null 2>&1 fi fi } - -# 清理日志 -function clean_log(){ - logrow=$(grep -c "" ${logfile}) - if [ $logrow -gt 500 ] ;then - sed -i '1,100d' ${logfile} - echo "`date "+%Y-%m-%d %H:%M:%S"` 【清理】日志超出上限,删除前 100 条" >> ${logfile} - fi -} -if [ -f ${logfile} ] ; then clean_log;fi - -# 文件锁 -function LockFile() -{ -if [ ! -f "${dir}serverchan.lock" ] ; then - > ${dir}serverchan.lock -else - while [ -f "${dir}serverchan.lock" ] ; - do - #sleep 1 - continue - done - LockFile -fi -} - -# 流量数据 -function usage(){ - if [ -f "/usr/sbin/wrtbwmon" ] && [ -f "/etc/init.d/wrtbwmon" ] ; then - wrtbwmon update ${dir}usage.db - else - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】未安装 wrtbwmon ,流量统计不可用" >> ${logfile};fi - fi -} - -# CPU 占用率 -function getcpu(){ - AT=$(cat /proc/stat | grep "^cpu " | awk '{print $2+$3+$4+$5+$6+$7+$8 " " $2+$3+$4+$7+$8}') - sleep 3 - BT=$(cat /proc/stat | grep "^cpu " | awk '{print $2+$3+$4+$5+$6+$7+$8 " " $2+$3+$4+$7+$8}') - printf "%.01f%%" $(echo $AT $BT | awk '{print (($4-$2)/($3-$1))*100}') -} - -# 流量数据 -function usage_ip(){ - if [ "$1" ] ;then - if [ -f ${dir}usage.db ] ; then ip=`cat ${dir}usage.db | grep -w $1`;else return;fi - if [ ! -z "$ip" ] ; then ip=`echo $ip | sed 's/,/ /g'`;fi - if [ ! -z "$ip" ] ; then ip_total=`echo $ip | awk '{print $6}'`;fi - if [ ! -z "$ip_total" ] ; then echo `bytes_for_humans $ip_total`;fi - fi -} - -# 流量数据剔除ip -function usage_down(){ - if [ ! -f "${dir}usage.db" ] ; then return;fi - if [ "$1" ] ;then - sed -i "/$1/d" ${dir}usage.db - logrow_usage=$(grep -c "" ${dir}usage.db) - if [ $logrow_usage -le "1" ] ;then - rm -f ${dir}usage.db >/dev/null 2>&1 +# 清理临时文件 +function deltemp(){ + unset title + unset content + rm -f ${dir}title >/dev/null 2>&1 + rm -f ${dir}content >/dev/null 2>&1 + LockFile unlock + if [ -f ${logfile} ] ; then + local logrow=$(grep -c "" ${logfile}) + if [ $logrow -gt 500 ] ;then + sed -i '1,100d' ${logfile} + echo "`date "+%Y-%m-%d %H:%M:%S"` 【清理】日志超出上限,删除前 100 条" >> ${logfile} fi fi } @@ -257,7 +208,7 @@ function bytes_for_humans { echo `awk 'BEGIN{printf "%.2f\n",'$1'/'1073741824'}'` GB fi else - echo 0bytes + echo 0 bytes fi } @@ -267,21 +218,21 @@ function time_for_humans { if [[ $1 -lt 60 ]]; then echo $1 秒 elif [[ $1 -lt 3600 ]]; then - usetime_min=`expr $1 / 60` - usetime_sec=`expr $usetime_min \* 60` - usetime_sec=`expr $1 - ${usetime_sec}` + local usetime_min=`expr $1 / 60` + local usetime_sec=`expr $usetime_min \* 60` + local usetime_sec=`expr $1 - ${usetime_sec}` echo $usetime_min 分 $usetime_sec 秒 elif [[ $1 -lt 216000 ]]; then - usetime_hour=`expr $1 / 3600` - usetime_min=`expr $usetime_hour \* 3600` - usetime_min=`expr $1 - ${usetime_min}` - usetime_min=`expr ${usetime_min} / 60` + local usetime_hour=`expr $1 / 3600` + local usetime_min=`expr $usetime_hour \* 3600` + local usetime_min=`expr $1 - ${usetime_min}` + local usetime_min=`expr ${usetime_min} / 60` echo $usetime_hour 小时 $usetime_min 分 else - usetime_day=`expr $1 / 86400` - usetime_hour=`expr $usetime_day \* 86400` - usetime_hour=`expr $1 - ${usetime_hour}` - usetime_hour=`expr ${usetime_hour} / 3600` + local usetime_day=`expr $1 / 86400` + local usetime_hour=`expr $usetime_day \* 86400` + local usetime_hour=`expr $1 - ${usetime_hour}` + local usetime_hour=`expr ${usetime_hour} / 3600` echo $usetime_day 天 $usetime_hour 小时 fi else @@ -289,11 +240,48 @@ function time_for_humans { fi } +# 流量数据 +function usage(){ + if [ -f "/usr/sbin/wrtbwmon" ] && [ -f "/etc/init.d/wrtbwmon" ] ; then + wrtbwmon update ${dir}usage.db + else + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】未安装 wrtbwmon ,流量统计不可用" >> ${logfile};fi + fi +} + +# CPU 占用率 +function getcpu(){ + local AT=$(cat /proc/stat | grep "^cpu " | awk '{print $2+$3+$4+$5+$6+$7+$8 " " $2+$3+$4+$7+$8}') + sleep 3 + local BT=$(cat /proc/stat | grep "^cpu " | awk '{print $2+$3+$4+$5+$6+$7+$8 " " $2+$3+$4+$7+$8}') + printf "%.01f%%" $(echo $AT $BT | awk '{print (($4-$2)/($3-$1))*100}') +} + +# 流量数据 +function usage_ip(){ + if [ "$1" ] ;then + if [ -f ${dir}usage.db ] ; then local ip=`cat ${dir}usage.db | grep -w $1`;else return;fi + if [ ! -z "$ip" ] ; then local ip=`echo $ip | sed 's/,/ /g'` && local ip_total=`echo $ip | awk '{print $6}'`;fi + if [ ! -z "$ip_total" ] ; then echo `bytes_for_humans $ip_total`;fi + fi +} + +# 流量数据剔除ip +function usage_down(){ + if [ ! -f "${dir}usage.db" ] ; then return;fi + if [ "$1" ] ;then + sed -i "/$1/d" ${dir}usage.db + local logrow_usage=$(grep -c "" ${dir}usage.db) + if [ $logrow_usage -le "1" ] ;then + rm -f ${dir}usage.db >/dev/null 2>&1 + fi + fi +} + # 检测黑白名单 function blackwhitelist(){ if [ "$1" ] ;then - ip_mac=$( cat ${dir}ipAddress | grep -w $1 |awk '{print $2}' | grep -v "^$" | sort -u ) - if [ -z "$ip_mac" ] ; then ip_mac=$( cat /proc/net/arp | grep -w $1 | awk '{print $4}' | grep -v "^$" | sort -u );fi + local ip_mac=`getmac $1` # 如果 “忽略列表 为空” 并且 “关注列表为空” if [ -z "$serverchan_whitelist" ] && [ -z "$serverchan_blacklist" ] && [ -z "$serverchan_interface" ]; then echo 1 @@ -316,8 +304,8 @@ function blackwhitelist(){ if ( echo $serverchan_interface | grep -q -i -w $ip_mac) ; then echo 1 else - wlan_interface=`iw dev $serverchan_interface station dump | grep -i -w $ip_mac | grep Station` - ipAddress_interface=$( cat ${dir}ipAddress | grep -w $1 |awk '{print $5}' | grep -v "^$" | sort -u ) + local wlan_interface=`iw dev $serverchan_interface station dump | grep -i -w $ip_mac | grep Station` + local ipAddress_interface=$( cat ${dir}ipAddress | grep -w $1 |awk '{print $5}' | grep -v "^$" | sort -u ) if [ ! -z "$wlan_interface" ] || [ ! -z "$ipAddress_interface" ] ; then echo 1 else @@ -328,88 +316,170 @@ function blackwhitelist(){ fi } +# 检测网络状态 +function rand_geturl(){ + local urllist="https://www.163.com https://www.qq.com https://www.baidu.com https://www.qidian.com https://www.douban.com" + local url_str=$( echo "$urllist" | awk -v i="`awk 'BEGIN{srand();sum=rand()*5+ 1;printf("%d",sum)}'`" '{print $i}' ) + local check=`curl -k -s -w "%{http_code}" $url_str -A "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11" -o /dev/null` + while [ -z "$check" ] || [ "$check" -ne "200" ]; + do + local check=`curl -k -s -w "%{http_code}" $url_str -A "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11" -o /dev/null` + if [ ! -z "$check" ] && [ "$check" -eq "200" ] ; then + if [ ! -z "$network_enable" ] && [ "$network_enable" -eq "404" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【网络状态】网络恢复正常.." >> ${logfile};fi + local network_enable="200" + else + if [ ! -z "$network_enable" ] && [ "$network_enable" -eq "200" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】当前网络不通!停止检测! " >> ${logfile};fi + local network_enable="404" + enable_detection $sleeptime + fi + continue + done +} + +# 检测 ip 状况 +function ip_changes(){ + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【外网IP】正在检测外网IP变化" >> ${logfile};fi + if [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "1" ] ; then local IPv4=$(ip -4 address show "$ipv4_interface" | grep inet | grep -v 127.0.0 | awk '{print $2}' | cut -d'/' -f1 | head -n 1 | grep -v "^$" | sort -u);fi + if [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "2" ] ; then local IPv4=$(curl -k -s -4 "$ipv4_URL");fi + if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "1" ] ; then local IPv6=$(ip -6 address show "$ipv6_interface" | grep inet6 | awk '{print $2}' | cut -d'/' -f1 | head -n 1 | grep -v "^$" | sort -u);fi + if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "2" ] ; then local IPv6=$(curl -k -s -6 "$ipv6_URL");fi + + if [ -f ${dir}ip ] ; then + local last_IPv4=$(cat "${dir}ip" | grep IPv4 | awk '{print $2}' | grep -v "^$" | sort -u) + local last_IPv6=$(cat "${dir}ip" | grep IPv6 | awk '{print $2}' | grep -v "^$" | sort -u) + + if [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -ne "0" ] ;then + if [ ! -z "$IPv4" ] && ( echo ${IPv4} | grep -w -q ${last_IPv4} );then + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` IP 无变化,当前 ip 为 $last_IPv4" >> ${logfile};fi + elif [ ! -z "$IPv4" ] ; then + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 当前 IP: ${IPv4}" >> ${logfile};fi + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 上次 IP: ${last_IPv4}" >> ${logfile};fi + echo "`date "+%Y-%m-%d %H:%M:%S"` 【微信推送】当前IP:${IPv4}" >> ${logfile} + echo IPv4 $IPv4 > ${dir}ip + echo -e IPv6 $last_IPv6 >> ${dir}ip + + if [ -f "${dir}title" ] ; then local title=`cat ${dir}title` ;fi + if [ -f "${dir}content" ] ; then local content=`cat ${dir}content` ;fi + if ( echo ${title} | grep -q "IP 地址变化" ) || [ -z "$title" ] ; then + local title="IP 地址变化" + else + local title="设备状态变化" + fi + + local content="%0D%0A%0D%0A---%0D%0A%0D%0A""####IP 地址变化%0D%0A%0D%0A>当前 IP:${IPv4}" + echo $title >${dir}title + echo -n $content >>${dir}content + else + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】获取 IPv4 地址失败" >> ${logfile} + fi + fi + + if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -ne "0" ] ;then + if [ ! -z "$IPv6" ] && ( echo ${IPv6} | grep -w -q ${last_IPv6} );then + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` IPv6 无变化,当前 ipv6 为 $last_IPv6" >> ${logfile};fi + elif [ ! -z "$IPv6" ] ; then + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 当前 IPv6: ${IPv6}" >> ${logfile};fi + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 上次 IPv6: ${last_IPv6}" >> ${logfile};fi + echo "`date "+%Y-%m-%d %H:%M:%S"` 【微信推送】当前IPv6:${IPv6}" >> ${logfile} + echo IPv4 $IPv4 > ${dir}ip + echo -e IPv6 $IPv6 >> ${dir}ip + + if [ -f "${dir}title" ] ; then local title=`cat ${dir}title` ;fi + if [ -f "${dir}content" ] ; then local content=`cat ${dir}content` ;fi + if ( echo ${title} | grep -q "IPv6 地址变化" ) || [ -z "$title" ] ; then + local title="IPv6 地址变化" + else + local title="设备状态变化" + fi + + local content="%0D%0A%0D%0A---%0D%0A%0D%0A""####IPv6 地址变化%0D%0A%0D%0A>当前 IPv6:${IPv6}" + echo $title >${dir}title + echo -n $content >>${dir}content + else + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】获取 IPv6 地址失败" >> ${logfile} + fi + fi + else + echo "`date "+%Y-%m-%d %H:%M:%S"` 【微信推送】路由器已经重启!" >> ${logfile} + if [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -ne "0" ] ;then echo "`date "+%Y-%m-%d %H:%M:%S"` 当前IP: ${IPv4}" >> ${logfile};fi + if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -ne "0" ] ;then echo "`date "+%Y-%m-%d %H:%M:%S"` 当前IPv6: ${IPv6}" >> ${logfile};fi + echo IPv4 $IPv4 > ${dir}ip + echo -e IPv6 $IPv6 >> ${dir}ip + if [ -f "${dir}title" ] ; then local title=`cat ${dir}title` ;fi + if [ -f "${dir}content" ] ; then local content=`cat ${dir}content` ;fi + local title="路由器重新启动" + local content="%0D%0A%0D%0A---%0D%0A%0D%0A""####路由器重新启动" + if [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -ne "0" ] ;then local content=${content}"%0D%0A%0D%0A>当前IP:${IPv4}";fi + if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -ne "0" ] ;then local content=${content}"%0D%0A%0D%0A>当前IPv6:${IPv6}";fi + echo $title >${dir}title + echo -n $content >>${dir}content + fi +} + +# 查询 mac 地址 +function getmac(){ + if [ -f "${dir}ipAddress" ] ; then local ip_mac=$( cat ${dir}ipAddress | grep -w $1 |awk '{print $2}' | grep -v "^$" | sort -u );fi + if ( echo "$ip_mac" | grep -q "unknown" ) || [ -z "$ip_mac" ] ; then local ip_mac=$( cat /var/dhcp.leases | grep -w $1 |awk '{print $2}' | grep -v "^$" | sort -u );fi + if ( echo "$ip_mac" | grep -q "unknown" ) || [ -z "$ip_mac" ] ; then local ip_mac=$( cat /proc/net/arp | grep -w $1 |awk '{print $4}' | grep -v "^$" | sort -u );fi + if [ -z "$ip_mac" ] ; then local ip_mac="unknown";fi + echo "$ip_mac" +} + +# 查询主机名 +function getname(){ + if [ -f "${dir}ipAddress" ] ; then local ip_name=$( cat ${dir}ipAddress | grep -w $1 |awk '{print $3}' | grep -v "^$" | sort -u );fi + if ( echo "$ip_name" | grep -q "unknown" ) || [ -z "$ip_name" ] ; then local ip_name=$( echo "$device_aliases" | grep -i $2 |awk '{print $2}' | grep -v "^$" | sort -u );fi + if ( echo "$ip_name" | grep -q "unknown" ) || [ -z "$ip_name" ] ; then local ip_name=$( cat /var/dhcp.leases | grep -w $1 |awk '{print $4}' | grep -v "^$" | sort -u );fi + if [ -z "$ip_name" ] ; then local ip_name="unknown";fi + echo "$ip_name" +} + # 检测设备上线 function up(){ if [ ! -f "${dir}ipAddress" ] ; then > ${dir}ipAddress;fi if [ "$1" ] ;then - send_enable=`get_config send_enable` - local temp_send_enable="$send_enable" - # 如果 ipAddress 文件中存在此ip,则跳过,待断线检测 grep -w -q $1 ${dir}ipAddress if [ $? -ne 0 ] ; then - ip_mac=$( cat /var/dhcp.leases | grep -w $1 |awk '{print $2}' | grep -v "^$" | sort -u ) - if [ -z "$ip_mac" ] ; then ip_mac=$( cat /proc/net/arp | grep "0x2" | grep -w $1 | awk '{print $4}' | grep -v "^$" | sort -u );fi - - if [ ! -z "$device_aliases" ] && [ ! -z "$ip_mac" ] && ( echo "$device_aliases" | grep -q -i $ip_mac ); then - ip_name=$( echo "$device_aliases" | grep -i $ip_mac |awk '{print $2}' | grep -v "^$" | sort -u ) - else - ip_name=$( cat /var/dhcp.leases | grep -w $1 |awk '{print $4}' | grep -v "^$" | sort -u ) - fi - - if [ -z "$ip_mac" ] ; then ip_mac="unknown";fi - if [ -z "$ip_name" ] ; then ip_name="unknown";fi - + local ip_mac=`getmac $1` + local ip_name=`getname $1 $ip_mac` + local ip_ms=`echo $( arping -I $( cat /proc/net/arp | grep -w $1 | awk '{print $6}' | grep -v "^$" | sort -u ) -c 10 -f -w 1 $1)` - if ( ! echo ${ip_ms} | grep -q ms );then local ip_ms=`ping -c 10 -w $up_timeout $1` - if ( ! echo ${ip_ms} | grep -q ms );then - sleep 1 + enable_detection 1 local ip_ms=`echo $( arping -I $( cat /proc/net/arp | grep -w $1 | awk '{print $6}' | grep -v "^$" | sort -u ) -c 10 -f -w $up_timeout $1)` fi - fi - - send_enable=`get_config send_enable` - if [ "$temp_send_enable" -ne "$send_enable" ] ; then return;fi + fi # 如果连接成功 if ( echo ${ip_ms} | grep -q ms ); then - LockFile + LockFile lock usage_down $1 - if ( echo "$ip_mac" | grep -q "unknown" ) || ( echo "$ip_name" | grep -q "unknown" ) ; then - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 获取 $1 $ip_mac 设备信息失败,重试中" >> ${logfile};fi - for i in `seq 1 5` - do - sleep 1 - if [ -z "$ip_mac" ] ; then ip_mac=$( cat /var/dhcp.leases | grep -w $1 |awk '{print $2}' | grep -v "^$" | sort -u );fi - if [ -z "$ip_mac" ] ; then ip_mac=$( cat /proc/net/arp | grep "0x2" | grep -w $1 | awk '{print $4}' | grep -v "^$" | sort -u );fi - if [ ! -z "$device_aliases" ] && [ ! -z "$ip_mac" ] && ( echo "$device_aliases" | grep -q -i $ip_mac ); then ip_name=$( echo "$device_aliases" | grep -i $ip_mac |awk '{print $2}' | grep -v "^$" | sort -u );fi - if [ -z "$ip_name" ] ; then ip_name=$( cat /var/dhcp.leases | grep -w $1 |awk '{print $4}' | grep -v "^$" | sort -u );fi - if [ ! -z "$ip_mac" ] && [ ! -z "$ip_name" ] ; then break;fi - done - fi - if [ -z "$ip_mac" ] ; then - ip_mac="unknown" - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 获取 $1 mac 超时,跳过" >> ${logfile};fi - fi - if [ -z "$ip_name" ] ; then - ip_name="unknown" - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 获取 $1 设备名超时,跳过" >> ${logfile};fi - fi # 如果定时任务没有运行 + local send_enable=`get_config send_enable` if [ ! -z "$send_enable" ] && [ "$send_enable" -ne 3 ] ; then if [ ! -z "$serverchan_up" ] && [ "$serverchan_up" -eq "1" ] ; then # 如果通过黑白名单验证 if [ ! -z `blackwhitelist $1` ] && [ `blackwhitelist $1` -eq 1 ] ; then - if [ -f "${dir}title" ] ; then title=`cat ${dir}title` ;fi - if [ -f "${dir}content" ] ; then content=`cat ${dir}content` ;fi + if [ -f "${dir}title" ] ; then local title=`cat ${dir}title` ;fi + if [ -f "${dir}content" ] ; then local content=`cat ${dir}content` ;fi if [ -z "$title" ] ; then - title="$ip_name 连接了你的路由器" - content="%0D%0A%0D%0A---%0D%0A%0D%0A####新设备连接%0D%0A%0D%0A客户端名:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$ip_name%0D%0A%0D%0A客户端 IP:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$1%0D%0A%0D%0A客户端 MAC:%26ensp%3b%26ensp%3b$ip_mac" + local title="$ip_name 连接了你的路由器" + local content="%0D%0A%0D%0A---%0D%0A%0D%0A####新设备连接%0D%0A%0D%0A客户端名:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$ip_name%0D%0A%0D%0A客户端 IP:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$1%0D%0A%0D%0A客户端 MAC:%26ensp%3b%26ensp%3b$ip_mac" elif ( echo ${title} | grep -q "连接了你的路由器" ) ; then - title="$ip_name 连接了你的路由器" - content="%0D%0A%0D%0A客户端名:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$ip_name%0D%0A%0D%0A客户端 IP:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$1%0D%0A%0D%0A客户端 MAC:%26ensp%3b%26ensp%3b$ip_mac" + local title="$ip_name 连接了你的路由器" + local content="%0D%0A%0D%0A客户端名:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$ip_name%0D%0A%0D%0A客户端 IP:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$1%0D%0A%0D%0A客户端 MAC:%26ensp%3b%26ensp%3b$ip_mac" else - title="设备状态变化" - content="%0D%0A%0D%0A---%0D%0A%0D%0A####新设备连接%0D%0A%0D%0A客户端名:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$ip_name%0D%0A%0D%0A客户端 IP:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$1%0D%0A%0D%0A客户端 MAC:%26ensp%3b%26ensp%3b$ip_mac" + local title="设备状态变化" + local content="%0D%0A%0D%0A---%0D%0A%0D%0A####新设备连接%0D%0A%0D%0A客户端名:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$ip_name%0D%0A%0D%0A客户端 IP:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$1%0D%0A%0D%0A客户端 MAC:%26ensp%3b%26ensp%3b$ip_mac" fi echo "`date "+%Y-%m-%d %H:%M:%S"` 【微信推送】新设备 $ip_name $1 连接了">> ${logfile} if [ ! -z "$serverchan_blacklist" ] ; then - title="你偷偷关注的设备上线了" + local title="你偷偷关注的设备上线了" fi echo $title >${dir}title @@ -417,18 +487,13 @@ if [ "$1" ] ;then fi fi if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 新设备 $ip_name $1 连接了" >> ${logfile};fi - else - # 如果定时任务运行 - unset title - unset content fi echo "$1 $ip_mac $ip_name `date +%s` `iw dev $serverchan_interface station dump | grep Station | grep -i -w $ip_mac | sed -nr 's#^.*on (.*))#\1#gp'`" >> ${dir}ipAddress else if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 设备 $ip_name $1 连接失败" >> ${logfile};fi fi - rm -f ${dir}serverchan.lock >/dev/null 2>&1 + LockFile unlock fi - unset ip_ms fi } @@ -436,36 +501,18 @@ fi function down(){ if [ ! -f "${dir}ipAddress" ] ; then return;fi if [ "$1" ] ;then - send_enable=`get_config send_enable` - local temp_send_enable="$send_enable" - ip_mac=$( cat ${dir}ipAddress | grep -w $1 |awk '{print $2}' | grep -v "^$" | sort -u ) - if [ -z "$ip_mac" ] ; then ip_mac=$( cat /proc/net/arp | grep "0x2" | grep -w $1 | awk '{print $4}' | grep -v "^$" | sort -u );fi - ip_name=$( cat ${dir}ipAddress | grep -w $1 |awk '{print $3}' | grep -v "^$" | sort -u ) - if ( echo "$ip_mac" | grep -q "unknown" ) || ( echo "$ip_name" | grep -q "unknown" ) ; then - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` $1 $ip_mac 无设备名,尝试重新读取" >> ${logfile};fi - time_up=$( cat ${dir}ipAddress | grep -w $ip |awk '{print $4}' | grep -v "^$" | sort -u ) - if [ -z "$time_up" ] ; then time_up=`date +%s`;fi - sed -i "/$1/d" ${dir}ipAddress - if [ -z "$ip_mac" ] ; then ip_mac=$( cat /var/dhcp.leases | grep -w $1 |awk '{print $2}' | grep -v "^$" | sort -u );fi - if [ -z "$ip_mac" ] ; then ip_mac=$( cat /proc/net/arp | grep "0x2" | grep -w $1 | awk '{print $4}' | grep -v "^$" | sort -u );fi - if [ ! -z "$device_aliases" ] && [ ! -z "$ip_mac" ] && ( echo "$device_aliases" | grep -q -i $ip_mac ); then ip_name=$( echo "$device_aliases" | grep -i $ip_mac |awk '{print $2}' | grep -v "^$" | sort -u );fi - if [ -z "$ip_name" ] ; then ip_name=$( cat /var/dhcp.leases | grep -w $1 |awk '{print $4}' | grep -v "^$" | sort -u );fi - if [ -z "$ip_mac" ] ; then ip_mac="unknown";fi - if [ -z "$ip_name" ] ; then ip_name="unknown";fi - echo "$1 $ip_mac $ip_name $time_up" >> ${dir}ipAddress - fi + local ip_mac=`getmac $1` + local ip_name=`getname $1 $ip_mac` + local ip_ms=`echo $( arping -I $( cat /proc/net/arp | grep -w $1 | awk '{print $6}' | grep -v "^$" | sort -u ) -c 20 -f -w $down_timeout $1)` if ( ! echo ${ip_ms} | grep -q ms );then local ip_ms=`ping -c 5 -w 5 $1` if ( ! echo ${ip_ms} | grep -q ms );then - sleep 1 + enable_detection 1 local ip_ms=`echo $( arping -I $( cat /proc/net/arp | grep -w $1 | awk '{print $6}' | grep -v "^$" | sort -u ) -c 20 -f -w $down_timeout $1)` fi - fi - - send_enable=`get_config send_enable` - if [ "$temp_send_enable" -ne "$send_enable" ] ; then return;fi + fi if ( echo ${ip_ms} | grep -q ms ); then # 如果连接成功 @@ -473,28 +520,29 @@ if [ "$1" ] ;then # 如果连接失败 else - LockFile + LockFile lock # 如果定时任务没有运行 + local send_enable=`get_config send_enable` if [ ! -z "$send_enable" ] && [ "$send_enable" -ne 3 ] && [ ! -z "$ip_ms" ] ; then if [ ! -z "$serverchan_down" ] && [ "$serverchan_down" -eq "1" ] ; then # 如果通过黑白名单验证 if [ ! -z `blackwhitelist $1` ] && [ `blackwhitelist $1` -eq 1 ] ; then - if [ -f "${dir}title" ] ; then title=`cat ${dir}title` ;fi - if [ -f "${dir}content" ] ; then content=`cat ${dir}content` ;fi - ip_total=`usage_ip $1` && if [ ! -z "$ip_total" ] ; then ip_total="%0D%0A%0D%0A总计流量: %26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$ip_total";fi - time_down=`date +%s` - time_up=$( cat ${dir}ipAddress | grep -w $1 |awk '{print $4}' | grep -v "^$" | sort -u ) - time1=$(($time_down-$time_up)) - time1=`time_for_humans $time1` + if [ -f "${dir}title" ] ; then local title=`cat ${dir}title` ;fi + if [ -f "${dir}content" ] ; then local content=`cat ${dir}content` ;fi + local ip_total=`usage_ip $1` && if [ ! -z "$ip_total" ] ; then local ip_total="%0D%0A%0D%0A总计流量: %26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$ip_total";fi + local time_down=`date +%s` + local time_up=$( cat ${dir}ipAddress | grep -w $1 |awk '{print $4}' | grep -v "^$" | sort -u ) + local time1=$(($time_down-$time_up)) + local time1=`time_for_humans $time1` if [ -z "$title" ] ; then - title="$ip_name 断开连接" - content="%0D%0A%0D%0A---%0D%0A%0D%0A####设备断开连接%0D%0A%0D%0A客户端名:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$ip_name%0D%0A%0D%0A客户端 IP: %26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$1%0D%0A%0D%0A客户端MAC: %26ensp%3b%26ensp%3b$ip_mac$ip_total%0D%0A%0D%0A在线时间: %26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$time1" + local title="$ip_name 断开连接" + local content="%0D%0A%0D%0A---%0D%0A%0D%0A####设备断开连接%0D%0A%0D%0A客户端名:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$ip_name%0D%0A%0D%0A客户端 IP: %26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$1%0D%0A%0D%0A客户端MAC: %26ensp%3b%26ensp%3b$ip_mac$ip_total%0D%0A%0D%0A在线时间: %26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$time1" elif ( echo ${title} | grep -q "断开连接" ) ; then - title="$ip_name 断开连接" - content="%0D%0A%0D%0A客户端名:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$ip_name%0D%0A%0D%0A客户端 IP:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$1%0D%0A%0D%0A客户端MAC:$ip_mac$ip_total%0D%0A%0D%0A在线时间:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$time1" + local title="$ip_name 断开连接" + local content="%0D%0A%0D%0A客户端名:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$ip_name%0D%0A%0D%0A客户端 IP:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$1%0D%0A%0D%0A客户端MAC:$ip_mac$ip_total%0D%0A%0D%0A在线时间:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$time1" else - title="设备状态变化" - content="%0D%0A%0D%0A---%0D%0A%0D%0A####设备断开连接%0D%0A%0D%0A客户端名:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$ip_name%0D%0A%0D%0A客户端 IP:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$1%0D%0A%0D%0A客户端MAC:$ip_mac$ip_total%0D%0A%0D%0A在线时间:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$time1" + local title="设备状态变化" + local content="%0D%0A%0D%0A---%0D%0A%0D%0A####设备断开连接%0D%0A%0D%0A客户端名:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$ip_name%0D%0A%0D%0A客户端 IP:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$1%0D%0A%0D%0A客户端MAC:$ip_mac$ip_total%0D%0A%0D%0A在线时间:%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$time1" fi echo "`date "+%Y-%m-%d %H:%M:%S"` 【微信推送】设备 $ip_name $1 断开连接 " >> ${logfile} @@ -505,75 +553,194 @@ if [ "$1" ] ;then if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 设备 $ip_name $1 断开连接 " >> ${logfile};fi sed -i "/$1/d" ${dir}ipAddress usage_down $1 - unset title - unset content fi - rm -f ${dir}serverchan.lock >/dev/null 2>&1 + LockFile unlock fi unset ip_ms fi } +# 当前设备列表 +function current_device(){ + local content=`cat ${dir}content` + if [ -f ${dir}usage.db ] ; then local ip_total_db="总计流量%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b";fi + content="%0D%0A%0D%0A---%0D%0A%0D%0A####现有在线设备 `grep -c "" ${dir}ipAddress` 台,具体如下%0D%0A%0D%0A#####IP 地址%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$ip_total_db客户端名" + local IPLIST=$( cat ${dir}ipAddress | awk '{print $1}' ) + for ip in $IPLIST; do + local ip_total=`usage_ip $ip` + local ip_mac=`getmac $ip` + local ip_name=`getname $ip $ip_mac` + if [ "${#ip_name}" -gt "18" ] ; then local ip_name=`echo ${ip_name:0:18}"*"`;fi + n=`expr 16 - ${#ip}` + for i in `seq 1 $n` + do + local ip=$ip"%26ensp%3b" + done + unset i && unset n + + if [ ! -z "$ip_total" ] ; then + n=`expr 12 - ${#ip_total}` + for i in `seq 1 $n` + do + local ip_total=$ip_total"%26ensp%3b" + done + fi + unset i && unset n + + local content=${content}"%0D%0A%0D%0A$ip$ip_total$ip_name" + done + echo -n $content >>${dir}content +} + # 获取SOC温度 function soc_temp(){ cat /sys/class/thermal/thermal_zone*/temp | sort | sed '$!d' | cut -c-2 2>/dev/null - # 取所有传感器数值中的最大值 +} + +# 检测 cpu 状态 +function cpu_load(){ + local cpu_Alert=0 + # 负载状态报警 + if [ ! -z "$cpuload_enable" ] && [ "$cpuload_enable" -eq "1" ] && [ `get_config send_enable` -ne 3 ] ; then + if [ -z "$cpuload_time" ] ; then cpuload_time=`date +%s`;fi + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【负载】正在检测 CPU 负载" >> ${logfile};fi + local cpu_fuzai=`cat /proc/loadavg | awk '{print $1}' 2>/dev/null` + local cpuload=`get_config cpuload` + if [ ! -z "$cpu_fuzai" ] && [ ! -z "$cpuload" ] && [ `expr $cpu_fuzai \> $cpuload` -eq "1" ] ; then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!警报!!】 CPU 负载过高: ${cpu_fuzai}" >> ${logfile} + elif [ -z "$cpu_fuzai" ] ; then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取设备负载,请检查命令" >> ${logfile} + # 一小时 CD 中 + elif [ ! -z "$cpucd_time" ] ; then + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` CPU 负载正常:$cpu_fuzai" >> ${logfile};fi + else + cpuload_time=`date +%s` + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` CPU 负载正常:$cpu_fuzai" >> ${logfile};fi + fi + + if [ "$((`date +%s`-$cpuload_time))" -ge "300" ] && [ -z "$cpucd_time" ] ; then + if [ -f "${dir}title" ] ; then local title=`cat ${dir}title` ;fi + if [ -f "${dir}content" ] ; then local content=`cat ${dir}content` ;fi + local title="CPU 负载过高!" + local cpu_Alert=1 + if [ -z "$cpucd_time" ] ; then cpucd_time=1;fi + echo "`date "+%Y-%m-%d %H:%M:%S"` 【微信推送】 CPU 负 载过高: ${cpu_fuzai}" >> ${logfile} + local content="%0D%0A%0D%0A---%0D%0A%0D%0A""####CPU 负载过高%0D%0A%0D%0A>CPU 负载已连续五分钟超过预设%0D%0A%0D%0A>接下来一小时不再提示%0D%0A%0D%0A>当前负载:${cpu_fuzai}" + echo $title >${dir}title + echo -n $content >>${dir}content + elif [ "$((`date +%s`-$cpuload_time))" -ge "3300" ] ;then + unset cpucd_time + fi + fi + + # 温度状态报警 + if [ ! -z "$temperature_enable" ] && [ "$temperature_enable" -eq "1" ] && [ `get_config send_enable` -ne 3 ] ; then + if [ -z "$temperature_time" ] ; then temperature_time=`date +%s`;fi + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【温度】正在检测 CPU 温度" >> ${logfile};fi + local cpu_wendu=`soc_temp` + local temperature=`get_config temperature` + if [ ! -z "$cpu_wendu" ] && [ ! -z "$temperature" ] && [ "$cpu_wendu" -gt "$temperature" ] ; then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!警报!!】 CPU 温度过高: ${cpu_wendu}" >> ${logfile} + elif [ -z "$cpu_wendu" ] ; then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取设备温度,请检查命令" >> ${logfile} + # 一小时 CD 中 + elif [ ! -z "$temperaturecd_time" ] ; then + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` CPU 温度正常:$cpu_wendu" >> ${logfile};fi + else + temperature_time=`date +%s` + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` CPU 温度正常:$cpu_wendu" >> ${logfile};fi + fi + + if [ "$((`date +%s`-$temperature_time))" -ge "300" ] && [ -z "$temperaturecd_time" ] ; then + if [ -f "${dir}title" ] ; then local title=`cat ${dir}title` ;fi + if [ -f "${dir}content" ] ; then local content=`cat ${dir}content` ;fi + if [ ! -z "$title" ] && ( echo ${title} | grep -q "过高" ) ; then + local title="设备报警!" + else + local title="CPU 温度过高!" + fi + local cpu_Alert=1 + if [ -z "$temperaturecd_time" ] ; then temperaturecd_time=1;fi + echo "`date "+%Y-%m-%d %H:%M:%S"` 【微信推送】 CPU 温 度过高: ${cpu_wendu}" >> ${logfile} + local content="%0D%0A%0D%0A---%0D%0A%0D%0A""####CPU 温度过高%0D%0A%0D%0A>CPU 温度已连续五分钟超过预设%0D%0A%0D%0A>接下来一小时不再提示%0D%0A%0D%0A>当前温度:${cpu_wendu}" + echo $title >${dir}title + echo -n $content >>${dir}content + elif [ "$((`date +%s`-$temperature_time))" -ge "3300" ] ;then + unset temperaturecd_time + fi + fi + + if [ ! -z "$cpu_Alert" ] && [ "$cpu_Alert" -eq "1" ] ; then + top -bn 1 >${dir}top + local content="%0D%0A%0D%0A---%0D%0A%0D%0A""####当前 CPU 占用前三的进程" + local i=1 && local top_i=5 + while [ $i -le 3 ] + do + if ( cat ${dir}top | awk 'NR=='$top_i | grep -q "top -bn 1" ) ; then + echo "" >/dev/null + else + local content=${content}"%0D%0A%0D%0A>`cat ${dir}top | awk 'NR=='$top_i | awk '{print $8" "$7}'`" + local i=`expr $i + 1` + fi + local top_i=`expr $top_i + 1` + done + echo -n $content >>${dir}content + rm -f ${dir}top >/dev/null 2>&1 + fi } # 发送定时数据 function send(){ - echo "`date "+%Y-%m-%d %H:%M:%S"` 【定时数据】创建定时任务" >> ${logfile} uci set serverchan.serverchan.send_enable=3 uci commit serverchan - unset title - unset content - send_content="" + read_config + deltemp serverchan_cron - serverchan_disturb - send_title=`get_config send_title` - if [ -z "$send_title" ] ; then send_title="路由状态:";fi - router_status=`get_config router_status` - if [ ! -z "$router_status" ] && [ "$router_status" -eq "1" ] ; then send_content=${send_content}"%0D%0A%0D%0A---%0D%0A%0D%0A#### 系统运行状态%0D%0A%0D%0A";fi - if [ ! -z "$router_status" ] && [ "$router_status" -eq "1" ] ; then send_content=${send_content}"%0D%0A%0D%0A"" 平均负载:`cat /proc/loadavg | awk '{print $1" "$2" "$3}'`";fi - if [ ! -z "$router_status" ] && [ "$router_status" -eq "1" ] ; then send_content=${send_content}"%0D%0A%0D%0A"" CPU占用:`getcpu`";fi - if [ ! -z "$router_status" ] && [ "$router_status" -eq "1" ] ; then send_content=${send_content}"%0D%0A%0D%0A"" 内存占用:`free -m | sed -n '2p' | awk '{print""($3/$2)*100"%"}'`";fi - if [ ! -z "$router_status" ] && [ "$router_status" -eq "1" ] ; then send_content=${send_content}"%0D%0A%0D%0A""`cat /proc/uptime| awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf(" 运行时间:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'`";fi - router_temp=`get_config router_temp` - if [ ! -z "$router_temp" ] && [ "$router_temp" -eq "1" ] ; then send_content=${send_content}"%0D%0A%0D%0A""---%0D%0A%0D%0A#### 设备温度%0D%0A%0D%0A CPU:`soc_temp`%e2%84%83";fi - router_wan=`get_config router_wan` - ipv4_interface=$(get_config ipv4_interface) - ipv6_interface=$(get_config ipv6_interface) - ipv4_URL=`get_config ipv4_URL` - if [ -z "$ipv4_URL" ] ; then ipv4_URL="members.3322.org/dyndns/getip";fi - ipv6_URL=`get_config ipv6_URL` - if [ -z "$ipv6_URL" ] ; then ipv6_URL="v6.ip.zxinc.org/getip";fi - if [ ! -z "$ipv4_interface" ] ; then send_wanIP=$(/sbin/ifconfig $ipv4_interface | awk '/inet addr/ {print $2}' | awk -F: '{print $2}'| grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}');fi - if [ -z "$ipv4_interface" ] ; then send_wanIP=$(ubus call network.interface.wan status | grep '\"address\"' | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}');fi - if [ ! -z "$ipv6_interface" ] ; then send_wanIPv6=$(ip addr show $ipv6_interface |grep -v deprecated|grep -A1 'inet6 [^f:]'|sed -nr ':a;N;s#^ +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*#\2 \1#p;ta'|sort -nr|head -n1|cut -d' ' -f2);fi - if [ -z "$ipv6_interface" ] ; then send_wanIPv6=$(ip addr show|grep -v deprecated|grep -A1 'inet6 [^f:]'|sed -nr ':a;N;s#^ +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*#\2 \1#p;ta'|sort -nr|head -n1|cut -d' ' -f2);fi - if [ ! -z "$ipv4_interface" ] ; then send_hostIP=$(curl -k -s -4 --interface $ipv4_interface $ipv4_URL);fi - if [ -z "$ipv4_interface" ] ; then send_hostIP=$(curl -k -s -4 $ipv4_URL);fi - if [ ! -z "$ipv6_interface" ] ; then send_hostIPv6=$(curl -k -s -6 --interface $send_wanIPv6 $ipv6_URL);fi - if [ -z "$ipv6_interface" ] ; then send_hostIPv6=$(curl -k -s -6 $ipv6_URL);fi + echo "`date "+%Y-%m-%d %H:%M:%S"` 【定时数据】创建定时任务" >> ${logfile} + local send_title=`get_config send_title` + if [ -z "$send_title" ] ; then local send_title="路由状态:";fi + local router_status=`get_config router_status` + if [ ! -z "$router_status" ] && [ "$router_status" -eq "1" ] ; then local send_content=${send_content}"%0D%0A%0D%0A---%0D%0A%0D%0A#### 系统运行状态%0D%0A%0D%0A";fi + if [ ! -z "$router_status" ] && [ "$router_status" -eq "1" ] ; then local send_content=${send_content}"%0D%0A%0D%0A"" 平均负载:`cat /proc/loadavg | awk '{print $1" "$2" "$3}'`";fi + if [ ! -z "$router_status" ] && [ "$router_status" -eq "1" ] ; then local send_content=${send_content}"%0D%0A%0D%0A"" CPU占用:`getcpu`";fi + if [ ! -z "$router_status" ] && [ "$router_status" -eq "1" ] ; then local send_content=${send_content}"%0D%0A%0D%0A"" 内存占用:`free -m | sed -n '2p' | awk '{print""($3/$2)*100"%"}'`";fi + if [ ! -z "$router_status" ] && [ "$router_status" -eq "1" ] ; then local send_content=${send_content}"%0D%0A%0D%0A""`cat /proc/uptime| awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf(" 运行时间:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'`";fi + local router_temp=`get_config router_temp` + if [ ! -z "$router_temp" ] && [ "$router_temp" -eq "1" ] ; then local send_content=${send_content}"%0D%0A%0D%0A""---%0D%0A%0D%0A#### 设备温度%0D%0A%0D%0A CPU:`soc_temp`%e2%84%83";fi + local router_wan=`get_config router_wan` + local ipv4_interface=$(get_config ipv4_interface) + local ipv6_interface=$(get_config ipv6_interface) + local ipv4_URL=`get_config ipv4_URL` + if [ -z "$ipv4_URL" ] ; then local ipv4_URL="members.3322.org/dyndns/getip";fi + local ipv6_URL=`get_config ipv6_URL` + if [ -z "$ipv6_URL" ] ; then local ipv6_URL="v6.ip.zxinc.org/getip";fi + if [ ! -z "$ipv4_interface" ] ; then local send_wanIP=$(/sbin/ifconfig $ipv4_interface | awk '/inet addr/ {print $2}' | awk -F: '{print $2}'| grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}');fi + if [ -z "$ipv4_interface" ] ; then local send_wanIP=$(ubus call network.interface.wan status | grep '\"address\"' | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}');fi + if [ ! -z "$ipv6_interface" ] ; then local send_wanIPv6=$(ip addr show $ipv6_interface |grep -v deprecated|grep -A1 'inet6 [^f:]'|sed -nr ':a;N;s#^ +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*#\2 \1#p;ta'|sort -nr|head -n1|cut -d' ' -f2);fi + if [ -z "$ipv6_interface" ] ; then local send_wanIPv6=$(ip addr show|grep -v deprecated|grep -A1 'inet6 [^f:]'|sed -nr ':a;N;s#^ +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*#\2 \1#p;ta'|sort -nr|head -n1|cut -d' ' -f2);fi + if [ ! -z "$ipv4_interface" ] ; then local send_hostIP=$(curl -k -s -4 --interface $ipv4_interface $ipv4_URL);fi + if [ -z "$ipv4_interface" ] ; then local send_hostIP=$(curl -k -s -4 $ipv4_URL);fi + if [ ! -z "$ipv6_interface" ] ; then local send_hostIPv6=$(curl -k -s -6 --interface $send_wanIPv6 $ipv6_URL);fi + if [ -z "$ipv6_interface" ] ; then local send_hostIPv6=$(curl -k -s -6 $ipv6_URL);fi if [ ! -z "$router_wan" ] && [ "$router_wan" -eq "1" ] ; then - send_content=${send_content}"%0D%0A%0D%0A""---%0D%0A%0D%0A#### WAN 口信息%0D%0A%0D%0A 接口ip:$send_wanIP" - send_content=${send_content}"%0D%0A%0D%0A"" 外网ip:$send_hostIP" - send_content=${send_content}"%0D%0A%0D%0A"" ipv6 :$send_wanIPv6" - send_content=${send_content}"%0D%0A%0D%0A"" 外网v6:$send_hostIPv6" + local send_content=${send_content}"%0D%0A%0D%0A""---%0D%0A%0D%0A#### WAN 口信息%0D%0A%0D%0A 接口ip:$send_wanIP" + local send_content=${send_content}"%0D%0A%0D%0A"" 外网ip:$send_hostIP" + local send_content=${send_content}"%0D%0A%0D%0A"" ipv6 :$send_wanIPv6" + local send_content=${send_content}"%0D%0A%0D%0A"" 外网v6:$send_hostIPv6" if [ ! -z "$send_content" ] && [ ! -z "$router_wan" ] ; then - if ( ! echo ${send_wanIP} | grep -q -w ${send_hostIP} );then send_content=${send_content}"%0D%0A%0D%0A"" 外网 ip 与接口 ip 不一致,你的 ip 不是公网 ip";fi + if ( ! echo ${send_wanIP} | grep -q -w ${send_hostIP} );then local send_content=${send_content}"%0D%0A%0D%0A"" 外网 ip 与接口 ip 不一致,你的 ip 不是公网 ip";fi else - send_content=${send_content}"%0D%0A%0D%0A"" ip 获取失败" + local send_content=${send_content}"%0D%0A%0D%0A"" ip 获取失败" fi - send_content=${send_content}"%0D%0A%0D%0A""`ubus call network.interface.wan status | grep \"uptime\" | sed $'s/\"uptime": //g'| sed $'s/\,//g'| awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf(" 在线时间:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'`" + local send_content=${send_content}"%0D%0A%0D%0A""`ubus call network.interface.wan status | grep \"uptime\" | sed $'s/\"uptime": //g'| sed $'s/\,//g'| awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf(" 在线时间:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'`" fi - client_list=`get_config client_list` + local client_list=`get_config client_list` if [ ! -z "$client_list" ] && [ "$client_list" -eq "1" ] ; then if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【定时数据】检测客户端列表" >> ${logfile};fi if [ ! -f "${dir}ipAddress" ] ; then > ${dir}ipAddress;fi if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【定时数据】开始进行设备下线检测" >> ${logfile};fi - IPLIST=$( cat ${dir}ipAddress| awk '{print $1}' | grep -v "^$" | sort -u ) + local IPLIST=$( cat ${dir}ipAddress| awk '{print $1}' | grep -v "^$" | sort -u ) for ip in $IPLIST; do if [ ! -z "$ip" ] ; then down $ip & @@ -581,92 +748,67 @@ function send(){ done wait + unset IPLIST if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【定时数据】开始进行设备接入检测" >> ${logfile};fi - IPLIST=$( cat /proc/net/arp | grep "0x2" | awk '{print $1}' | grep -v "^$" | sort -u ) - for ip in $IPLIST; do + local IPLIST=$( cat /proc/net/arp | grep "0x2" | awk '{print $1}' | grep -v "^$" | sort -u ) + for ip in $IPLIST; do if [ ! -z "$ip" ] ; then up $ip & fi done wait - send_content=${send_content}"%0D%0A%0D%0A---%0D%0A%0D%0A#### 在线设备%0D%0A%0D%0A"; - IPLIST=$( cat ${dir}ipAddress | awk '{print $1}' ) - for ip in $IPLIST; do - ip_total=`usage_ip $ip` && if [ ! -z "$ip_total" ] ; then ip_total="总计流量:$ip_total ";fi - time_down=`date +%s` - time_up=$( cat ${dir}ipAddress | grep -w $ip |awk '{print $4}' | grep -v "^$" | sort -u ) - time1=$(($time_down-$time_up)) - time1=`time_for_humans $time1` - ip_name=$( cat ${dir}ipAddress | grep -w $ip | awk '{print $3}' | grep -v "^$" | sort -u ) - if [ "${#ip_name}" -gt "20" ] ; then ip_name=`echo ${ip_name:0:20}"*"`;fi - send_content=${send_content}"%0D%0A%0D%0A $ip_name $ip%0D%0A%0D%0A $ip_total在线 $time1%0D%0A%0D%0A ----" + local send_content=${send_content}"%0D%0A%0D%0A---%0D%0A%0D%0A#### 在线设备%0D%0A%0D%0A"; + + unset IPLIST + local IPLIST=$( cat ${dir}ipAddress | awk '{print $1}' ) + for ip in $IPLIST; do + local ip_total=`usage_ip $ip` && if [ ! -z "$ip_total" ] ; then local ip_total="总计流量:$ip_total ";fi + local time_down=`date +%s` + local time_up=$( cat ${dir}ipAddress | grep -w $ip |awk '{print $4}' | grep -v "^$" | sort -u ) + local time1=$(($time_down-$time_up)) + local time1=`time_for_humans $time1` + local ip_mac=`getmac $ip` + local ip_name=`getname $ip $ip_mac` + if [ "${#ip_name}" -gt "20" ] ; then local ip_name=`echo ${ip_name:0:20}"*"`;fi + local send_content=${send_content}"%0D%0A%0D%0A $ip_name $ip%0D%0A%0D%0A $ip_total在线 $time1%0D%0A%0D%0A ----" done fi - if [ ! -z "$device_name" ] ; then send_title="【$device_name】$send_title" ;fi - send_title=$( echo $send_title | sed $'s/\ /%20/g'| sed $'s/\"/%22/g'| sed $'s/\#/%23/g'| sed $'s/\&/%26/g'| sed $'s/\,/%2C/g'| sed $'s/\//%2F/g'| sed $'s/\:/%3A/g'| sed $'s/\;/%3B/g'| sed $'s/\=/%3D/g'| sed $'s/\@/%40/g') - content=$( echo $content| sed $'s/unknown/%e6%9c%aa%e7%9f%a5%e8%ae%be%e5%a4%87/') - #send_content=$( echo $send_content | sed $'s/\ /%20/g'| sed $'s/\"/%22/g'| sed $'s/\#/%23/g'| sed $'s/\&/%26/g'| sed $'s/\,/%2C/g'| sed $'s/\//%2F/g'| sed $'s/\:/%3A/g'| sed $'s/\;/%3B/g'| sed $'s/\=/%3D/g'| sed $'s/\@/%40/g') - #未转义 | sed $'s/\(/%28/g' | sed $'s/\)/%29/g' | sed $'s/\+/%2B/g' | sed $'s/\%/%25/g' | sed $'s/\/%3E/g' | sed $'s/\?/%3F/g' | sed $'s/\\/%5C/g' | sed $'s/\|/%7C/g' - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【定时数据】进行 URL 编码,标题=$send_title" >> ${logfile};fi + if [ ! -z "$device_name" ] ; then local send_title="【$device_name】$send_title" ;fi + local send_title=$( echo $send_title | sed $'s/\ /%20/g'| sed $'s/\"/%22/g'| sed $'s/\#/%23/g'| sed $'s/\&/%26/g'| sed $'s/\,/%2C/g'| sed $'s/\//%2F/g'| sed $'s/\:/%3A/g'| sed $'s/\;/%3B/g'| sed $'s/\=/%3D/g'| sed $'s/\@/%40/g') + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【定时数据】进行 URL 编码,标题:$send_title" >> ${logfile};fi if [ -z "$send_content" ] ; then - send_content="%0D%0A%0D%0A---%0D%0A%0D%0A#### 我遇到了一个难题%0D%0A%0D%0A>你没有选择需要发送的项目,该怎么办呢%0D%0A%0D%0A---"; + local send_content="%0D%0A%0D%0A---%0D%0A%0D%0A#### 我遇到了一个难题%0D%0A%0D%0A>你没有选择需要发送的项目,该怎么办呢%0D%0A%0D%0A---"; echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】定时发送选项错误,请检查你的设置" >> ${logfile} fi - nowtime=`date "+%Y-%m-%d %H:%M:%S"` - if [ ! -z "$serverchan_sheep" ] && [ "$serverchan_sheep" -eq "2" ] && [ ! -z "$starttime" ] && [ ! -z "$endtime" ] ;then - if [ `date +%H` -ge $endtime -a $starttime -lt $endtime ] || [ `date +%H` -lt $starttime -a $starttime -lt $endtime ] || [ `date +%H` -lt $starttime -a `date +%H` -ge $endtime -a $starttime -gt $endtime ] ; then - curl -s "http://sc.ftqq.com/$serverchan_sckey.send?text=${send_title}" -d "&desp=${nowtime}%0D%0A%0D%0A${send_content}" >/dev/null - else - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【定时数据】当前为免打扰时间,消息不发送" >> ${logfile};fi - fi + + local nowtime=`date "+%Y-%m-%d %H:%M:%S"` + disturb=`serverchan_disturb` + if [ $disturb -eq "0" ] ;then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【免打扰】当前为免打扰时间,消息不发送" >> ${logfile} else curl -s "http://sc.ftqq.com/$serverchan_sckey.send?text=${send_title}" -d "&desp=${nowtime}%0D%0A%0D%0A${send_content}" >/dev/null + echo "`date "+%Y-%m-%d %H:%M:%S"` 【定时数据】微信推送" >> ${logfile} fi uci set serverchan.serverchan.send_enable=0 uci commit serverchan - echo "`date "+%Y-%m-%d %H:%M:%S"` 【定时数据】微信推送" >> ${logfile} exit } -if [ "$1" ] ;then - if [ $1 = "send" ] ;then send;fi - if [ $1 = "crontab" ] ;then serverchan_cron;fi - exit -fi - -serverchan_cron -serverchan_init -serverchan_disturb - # 初始化在线设备列表 function serverchan_first(){ if [ ! -z "$serverchan_enable" ] && [ "$serverchan_enable" -eq "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】载入在线设备" >> ${logfile} uci set serverchan.serverchan.send_enable=3 uci commit serverchan - IPLIST=$( cat /proc/net/arp | grep "0x2" | awk '{print $1}' | grep -v "^$" | sort -u ) + local IPLIST=$( cat /proc/net/arp | grep "0x2" | awk '{print $1}' | grep -v "^$" | sort -u ) > ${dir}ipAddress - for ip in $IPLIST; do + for ip in $IPLIST; do # 如果 “ip 列表不为空” - if [ ! -z "$ip" ] ; then - - ip_mac=$( cat /var/dhcp.leases | grep -w $ip |awk '{print $2}' | grep -v "^$" | sort -u ) - if [ -z "$ip_mac" ] ; then ip_mac=$( cat /proc/net/arp | grep "0x2" | grep -w $ip | awk '{print $4}' | grep -v "^$" | sort -u );fi - - if [ ! -z "$device_aliases" ] && [ ! -z "$ip_mac" ] && ( echo "$device_aliases" | grep -q -i $ip_mac ); then - ip_name=$( echo "$device_aliases" | grep -i $ip_mac |awk '{print $2}' | grep -v "^$" | sort -u ) - else - ip_name=$( cat /var/dhcp.leases | grep -w $ip |awk '{print $4}' | grep -v "^$" | sort -u ) - fi - - if [ -z "$ip_name" ] ; then - temp_ms=`ping -c 1 -w 2 $ip` & - fi - if [ -z "$ip_mac" ] ; then ip_mac="unknown";fi - if [ -z "$ip_name" ] ; then ip_name="unknown";fi + if [ ! -z "$ip" ] ; then + local ip_mac=`getmac $ip` + local ip_name=`getname $ip $ip_mac` up $ip & - fi done wait @@ -675,343 +817,74 @@ if [ ! -z "$serverchan_enable" ] && [ "$serverchan_enable" -eq "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【初始化】初始化完成" >> ${logfile} fi } + +# 启动参数 +if [ "$1" ] ;then + if [ $1 = "send" ] ;then send;fi + if [ $1 = "crontab" ] ;then serverchan_cron;fi + exit +fi + +# 初始化 +serverchan_cron +read_config +serverchan_init serverchan_first +# 循环 while [ "$serverchan_enable" -eq "1" ] ; do -if [ -f ${logfile} ] ; then clean_log;fi - read_config - -function rand_geturl(){ - urllist="https://www.163.com https://www.qq.com https://www.baidu.com https://www.qidian.com https://www.douban.com" - url_str=$( echo "$urllist" | awk -v i="`awk 'BEGIN{srand();sum=rand()*5+ 1;printf("%d",sum)}'`" '{print $i}' ) - check=`curl -k -s -w "%{http_code}" $url_str -A "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11" -o /dev/null` -} + deltemp rand_geturl - if [ -z "$check" ] || [ "$check" -ne "200" ] ; then sleep 1 && rand_geturl;fi - if [ ! -z "$check" ] && [ "$check" -eq "200" ] ; then - usage - if [ ! -z "$network_enable" ] && [ "$network_enable" -eq "404" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【网络状态】网络恢复正常.." >> ${logfile};fi - network_enable="200" - - # 外网IP变化 - if [ ! -z "$serverchan_ipv4" ] && [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv4" -ne "0" ] || [ "$serverchan_ipv6" -ne "0" ] ; then - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【外网IP】正在检测外网IP变化" >> ${logfile};fi - nowtime=`date "+%Y-%m-%d %H:%M:%S"` - # 查询当前 ipv4 - if [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "1" ] ; then IPv4=$(ip -4 address show "$ipv4_interface" | grep inet | grep -v 127.0.0 | awk '{print $2}' | cut -d'/' -f1 | head -n 1 | grep -v "^$" | sort -u);fi - if [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -eq "2" ] ; then IPv4=$(curl -k -s -4 "$ipv4_URL");fi - - # 查询当前 ipv6 - if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "1" ] ; then IPv6=$(ip -6 address show "$ipv6_interface" | grep inet6 | awk '{print $2}' | cut -d'/' -f1 | head -n 1 | grep -v "^$" | sort -u);fi - if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -eq "2" ] ; then IPv6=$(curl -k -s -6 "$ipv6_URL");fi - - # 查询ip历史记录 - if [ -f ${dir}ip ] ; then - last_IPv4=$(cat "${dir}ip" | grep IPv4 | awk '{print $2}' | grep -v "^$" | sort -u) - last_IPv6=$(cat "${dir}ip" | grep IPv6 | awk '{print $2}' | grep -v "^$" | sort -u) - if [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -ne "0" ] ;then - if [ ! -z "$IPv4" ] && ( echo ${IPv4} | grep -w -q ${last_IPv4} );then - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` IP 无变化,当前 ip 为 $last_IPv4" >> ${logfile};fi - elif [ ! -z "$IPv4" ] ; then - echo "`date "+%Y-%m-%d %H:%M:%S"` 当前 IP: ${IPv4}" >> ${logfile} - echo "`date "+%Y-%m-%d %H:%M:%S"` 上次 IP: ${last_IPv4}" >> ${logfile} - echo "`date "+%Y-%m-%d %H:%M:%S"` 【微信推送】当前IP:${IPv4}" >> ${logfile} - echo IPv4 $IPv4 > ${dir}ip - echo -e IPv6 $last_IPv6 >> ${dir}ip - - if [ -f "${dir}title" ] ; then title=`cat ${dir}title` ;fi - if [ -f "${dir}content" ] ; then content=`cat ${dir}content` ;fi - if ( echo ${title} | grep -q "IP 地址变化" ) || [ -z "$title" ] ; then - title="IP 地址变化" - else - title="设备状态变化" - fi - - content="%0D%0A%0D%0A---%0D%0A%0D%0A""####IP 地址变化%0D%0A%0D%0A>当前 IP:${IPv4}" - echo $title >${dir}title - echo -n $content >>${dir}content - else - echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】获取 IPv4 地址失败" >> ${logfile} - fi - fi - - if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -ne "0" ] ;then - if [ ! -z "$IPv6" ] && ( echo ${IPv6} | grep -w -q ${last_IPv6} );then - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` IPv6 无变化,当前 ipv6 为 $last_IPv6" >> ${logfile};fi - elif [ ! -z "$IPv6" ] ; then - echo "`date "+%Y-%m-%d %H:%M:%S"` 当前 IPv6: ${IPv6}" >> ${logfile} - echo "`date "+%Y-%m-%d %H:%M:%S"` 上次 IPv6: ${last_IPv6}" >> ${logfile} - echo "`date "+%Y-%m-%d %H:%M:%S"` 【微信推送】当前IPv6:${IPv6}" >> ${logfile} - echo IPv4 $IPv4 > ${dir}ip - echo -e IPv6 $IPv6 >> ${dir}ip - - if [ -f "${dir}title" ] ; then title=`cat ${dir}title` ;fi - if [ -f "${dir}content" ] ; then content=`cat ${dir}content` ;fi - if ( echo ${title} | grep -q "IPv6 地址变化" ) || [ -z "$title" ] ; then - title="IPv6 地址变化" - else - title="设备状态变化" - fi - - content="%0D%0A%0D%0A---%0D%0A%0D%0A""####IPv6 地址变化%0D%0A%0D%0A>当前 IPv6:${IPv6}" - echo $title >${dir}title - echo -n $content >>${dir}content - else - echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】获取 IPv6 地址失败" >> ${logfile} - fi - fi - - else - unset last_IPv4 - unset last_IPv6 - echo "`date "+%Y-%m-%d %H:%M:%S"` 【微信推送】路由器已经重启!" >> ${logfile} - if [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -ne "0" ] ;then echo "`date "+%Y-%m-%d %H:%M:%S"` 当前IP: ${IPv4}" >> ${logfile};fi - if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -ne "0" ] ;then echo "`date "+%Y-%m-%d %H:%M:%S"` 当前IPv6: ${IPv6}" >> ${logfile};fi - echo IPv4 $IPv4 > ${dir}ip - echo -e IPv6 $IPv6 >> ${dir}ip - - if [ -f "${dir}title" ] ; then title=`cat ${dir}title` ;fi - if [ -f "${dir}content" ] ; then content=`cat ${dir}content` ;fi - title="路由器重新启动" - content="%0D%0A%0D%0A---%0D%0A%0D%0A""####路由器重新启动" - if [ ! -z "$serverchan_ipv4" ] && [ "$serverchan_ipv4" -ne "0" ] ;then content=${content}"%0D%0A%0D%0A>当前IP:${IPv4}";fi - if [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv6" -ne "0" ] ;then content=${content}"%0D%0A%0D%0A>当前IPv6:${IPv6}";fi - echo $title >${dir}title - echo -n $content >>${dir}content - fi - if [ -f ${logfile} ] ; then clean_log;fi - fi - - # 设备下线提醒 - if [ ! -z "$serverchan_down" ] && [ "$serverchan_down" -eq "1" ] ; then - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【离线】开始进行设备下线检测" >> ${logfile};fi - fi - read_config - # 从 ipAddress 文件中读取上次检测到的在线列表 - if [ -f ${dir}ipAddress ] ; then IPLIST=$( cat ${dir}ipAddress | awk '{print $1}' | grep -v "^$" | sort -u ) && IPLISTrow=$(grep -c "" ${dir}ipAddress);fi - - for ip in $IPLIST; do - # 如果 ip 列表不为空 - send_enable=`get_config send_enable` - if [ ! -z "$ip" ] && [ "$send_enable" -ne 3 ] ; then - ip_mac=$( cat /var/dhcp.leases | grep -w $ip |awk '{print $2}' | grep -v "^$" | sort -u ) - if [ -z "$ip_mac" ] ; then ip_mac=$( cat /proc/net/arp | grep "0x2" | grep -w $ip | awk '{print $4}' | grep -v "^$" | sort -u );fi - - # 设备名为空时尝试重读 - if [ ! -z "$device_aliases" ] && [ ! -z "$ip_mac" ] && ( echo "$device_aliases" | grep -q -i $ip_mac ); then - ip_name=$( echo "$device_aliases" | grep -i $ip_mac |awk '{print $2}' | grep -v "^$" | sort -u ) - ipAddress_name=$( cat ${dir}ipAddress | grep -w $ip | awk '{print $3}' | grep -v "^$" | sort -u ) - if [ ! -z ipAddress_name ] && ( ! echo $ip_name | grep -q $ipAddress_name ) ; then - time_up=$( cat ${dir}ipAddress | grep -w $ip |awk '{print $4}' | grep -v "^$" | sort -u ) - if [ -z "$time_up" ] ; then time_up=`date +%s`;fi - sed -i "/$ip/d" ${dir}ipAddress - echo "$ip $ip_mac $ip_name $time_up" >> ${dir}ipAddress - fi - else - ip_name=$( cat /var/dhcp.leases | grep -w $ip |awk '{print $4}' | grep -v "^$" | sort -u ) - fi - if [ -z "$ip_mac" ] ; then ip_mac="unknown";fi - if [ -z "$ip_name" ] ; then ip_name="unknown";fi - - down $ip & - - fi - done - wait - if [ "$IPLISTrow" -eq $(grep -c "" ${dir}ipAddress) ] ; then - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 没有检测到设备离线" >> ${logfile};fi - fi - - # 新设备接入 - if [ ! -z "$serverchan_up" ] && [ "$serverchan_up" -eq "1" ] ; then - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【连接】开始进行设备接入检测" >> ${logfile};fi - fi - read_config - # 从 arp 缓存中读取 0x2 在线列表 - if [ -f ${dir}ipAddress ] ; then IPLIST=$( cat /proc/net/arp | grep "0x2" | awk '{print $1}' | grep -v "^$" | sort -u ) && IPLISTrow=$(grep -c "" ${dir}ipAddress);fi - for ip in $IPLIST; do - # 如果 “ip 列表不为空” - send_enable=`get_config send_enable` - if [ ! -z "$ip" ] && [ "$send_enable" -ne 3 ] ; then - - ip_mac=$( cat /var/dhcp.leases | grep -w $ip |awk '{print $2}' | grep -v "^$" | sort -u ) - if [ -z "$ip_mac" ] ; then ip_mac=$( cat /proc/net/arp | grep "0x2" | grep -w $ip | awk '{print $4}' | grep -v "^$" | sort -u );fi - - if [ ! -z "$device_aliases" ] && [ ! -z "$ip_mac" ] && ( echo "$device_aliases" | grep -q -i $ip_mac ); then - ip_name=$( echo "$device_aliases" | grep -i $ip_mac |awk '{print $2}' | grep -v "^$" | sort -u ) - else - ip_name=$( cat /var/dhcp.leases | grep -w $ip |awk '{print $4}' | grep -v "^$" | sort -u ) - fi - - if [ -z "$ip_name" ] ; then - temp_ms=`ping -c 1 -w 2 $ip` & - fi - if [ -z "$ip_mac" ] ; then ip_mac="unknown";fi - if [ -z "$ip_name" ] ; then ip_name="unknown";fi - - up $ip & - - fi - done - - wait - if [ "$IPLISTrow" -eq $(grep -c "" ${dir}ipAddress) ] ; then - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 没有新设备连接" >> ${logfile};fi - else - usage - fi - - if [ -f "${dir}content" ] ; then - content=`cat ${dir}content` - if [ -f ${dir}usage.db ] ; then ip_total_db="总计流量%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b";fi - content="%0D%0A%0D%0A---%0D%0A%0D%0A####现有在线设备 `grep -c "" ${dir}ipAddress` 台,具体如下%0D%0A%0D%0A#####IP 地址%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b%26ensp%3b$ip_total_db客户端名" - IPLIST=$( cat ${dir}ipAddress | awk '{print $1}' ) - for ip in $IPLIST; do - ip_total=`usage_ip $ip` - #time_down=`date +%s` - #time_up=$( cat ${dir}ipAddress | grep -w $ip |awk '{print $4}' | grep -v "^$" | sort -u ) - #time1=$(($time_down-$time_up)) - #time1=`time_for_humans $time1` - ip_name=$( cat ${dir}ipAddress | grep -w $ip | awk '{print $3}' | grep -v "^$" | sort -u ) - if [ "${#ip_name}" -gt "18" ] ; then ip_name=`echo ${ip_name:0:18}"*"`;fi - n=`expr 16 - ${#ip}` - for i in `seq 1 $n` - do - ip=$ip"%26ensp%3b" - done - - if [ ! -z "$ip_total" ] ; then - n=`expr 12 - ${#ip_total}` - for i in `seq 1 $n` - do - ip_total=$ip_total"%26ensp%3b" - done - fi - content=${content}"%0D%0A%0D%0A$ip$ip_total$ip_name" - done - echo -n $content >>${dir}content - fi - - cpu_Alert=0 - # 负载状态报警 - if [ ! -z "$cpuload_enable" ] && [ "$cpuload_enable" -eq "1" ] ; then - if [ -z "$cpuload_time" ] ; then cpuload_time=`date +%s`;fi - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【负载】正在检测 CPU 负载" >> ${logfile};fi - cpu_fuzai=`cat /proc/loadavg | awk '{print $1}' 2>/dev/null` - cpuload=`get_config cpuload` - if [ ! -z "$cpu_fuzai" ] && [ ! -z "$cpuload" ] && [ `expr $cpu_fuzai \> $cpuload` -eq "1" ] ; then - #if [ -f ${logfile} ] && [ $(grep -c "" ${logfile}) -ge "2" ] ; then - #log_end=`awk '{print}' ${logfile} | tail -n 2 | awk 'NR==1'` - #log_end_2=`awk 'END {print}' ${logfile}` - #if ( echo ${log_end} | grep -q "负载" ) && ( echo ${log_end_2} | grep -q "负载" ) ; then - #sed -i '$d' -i /tmp/serverchan/serverchan.log - #sed -i '$d' -i /tmp/serverchan/serverchan.log - #echo "`echo $log_end | awk '{print $1" "$2}'` 【刷屏日志自动过滤】 CPU 负载持续超高: `echo $log_end | awk '{print $6}'`" >> ${logfile} - #fi - #fi - echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!警报!!】 CPU 负载过高: ${cpu_fuzai}" >> ${logfile} - elif [ -z "$cpu_fuzai" ] ; then - echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取设备负载,请检查命令" >> ${logfile} - # 一小时 CD 中 - elif [ ! -z "$cpucd_time" ] ; then - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` CPU 负载正常:$cpu_fuzai" >> ${logfile};fi - else - cpuload_time=`date +%s` - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` CPU 负载正常:$cpu_fuzai" >> ${logfile};fi - fi - - if [ "$((`date +%s`-$cpuload_time))" -ge "300" ] && [ -z "$cpucd_time" ] ; then - if [ -f "${dir}title" ] ; then title=`cat ${dir}title` ;fi - if [ -f "${dir}content" ] ; then content=`cat ${dir}content` ;fi - title="CPU 负载过高!" - cpu_Alert=1 - if [ -z "$cpucd_time" ] ; then cpucd_time=1;fi - echo "`date "+%Y-%m-%d %H:%M:%S"` 【微信推送】 CPU 负 载过高: ${cpu_fuzai}" >> ${logfile} - content="%0D%0A%0D%0A---%0D%0A%0D%0A""####CPU 负载过高%0D%0A%0D%0A>CPU 负载已连续五分钟超过预设%0D%0A%0D%0A>接下来一小时不再提示%0D%0A%0D%0A>当前负载:${cpu_fuzai}" - echo $title >${dir}title - echo -n $content >>${dir}content - elif [ "$((`date +%s`-$cpuload_time))" -ge "3300" ] ;then - unset cpucd_time - fi - fi - - # 温度状态报警 - if [ ! -z "$temperature_enable" ] && [ "$temperature_enable" -eq "1" ] ; then - if [ -z "$temperature_time" ] ; then temperature_time=`date +%s`;fi - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【温度】正在检测 CPU 温度" >> ${logfile};fi - cpu_wendu=`soc_temp` - temperature=`get_config temperature` - if [ ! -z "$cpu_wendu" ] && [ ! -z "$temperature" ] && [ "$cpu_wendu" -gt "$temperature" ] ; then - #if [ -f ${logfile} ] && [ $(grep -c "" ${logfile}) -ge "2" ] ; then - #log_end=`awk '{print}' ${logfile} | tail -n 2 | awk 'NR==1'` - #log_end_2=`awk 'END {print}' ${logfile}` - #if ( echo ${log_end} | grep -q "温度" ) && ( echo ${log_end_2} | grep -q "温度" ) ; then - #sed -i '$d' -i /tmp/serverchan/serverchan.log - #sed -i '$d' -i /tmp/serverchan/serverchan.log - #echo "`echo $log_end | awk '{print $1" "$2}'` 【刷屏日志自动过滤】 CPU 温度持续超高: `echo $log_end | awk '{print $6}'`" >> ${logfile} - #fi - #fi - echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!警报!!】 CPU 温度过高: ${cpu_wendu}" >> ${logfile} - elif [ -z "$cpu_wendu" ] ; then - echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】无法读取设备温度,请检查命令" >> ${logfile} - # 一小时 CD 中 - elif [ ! -z "$temperaturecd_time" ] ; then - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` CPU 温度正常:$cpu_wendu" >> ${logfile};fi - else - temperature_time=`date +%s` - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` CPU 温度正常:$cpu_wendu" >> ${logfile};fi - fi - - if [ "$((`date +%s`-$temperature_time))" -ge "300" ] && [ -z "$temperaturecd_time" ] ; then - if [ -f "${dir}title" ] ; then title=`cat ${dir}title` ;fi - if [ -f "${dir}content" ] ; then content=`cat ${dir}content` ;fi - if [ ! -z "$title" ] && ( echo ${title} | grep -q "过高" ) ; then - title="设备报警!" - else - title="CPU 温度过高!" - fi - cpu_Alert=1 - if [ -z "$temperaturecd_time" ] ; then temperaturecd_time=1;fi - echo "`date "+%Y-%m-%d %H:%M:%S"` 【微信推送】 CPU 温 度过高: ${cpu_wendu}" >> ${logfile} - content="%0D%0A%0D%0A---%0D%0A%0D%0A""####CPU 温度过高%0D%0A%0D%0A>CPU 温度已连续五分钟超过预设%0D%0A%0D%0A>接下来一小时不再提示%0D%0A%0D%0A>当前温度:${cpu_wendu}" - echo $title >${dir}title - echo -n $content >>${dir}content - elif [ "$((`date +%s`-$temperature_time))" -ge "3300" ] ;then - unset temperaturecd_time - fi - fi - - if [ ! -z "$cpu_Alert" ] && [ "$cpu_Alert" -eq "1" ] ; then - top -bn 1 >${dir}top - content="%0D%0A%0D%0A---%0D%0A%0D%0A""####当前 CPU 占用前三的进程" - i=1 && top_i=5 - while [ $i -le 3 ] - do - if ( cat ${dir}top | awk 'NR=='$top_i | grep -q "top -bn 1" ) ; then - echo "" >/dev/null - else - content=${content}"%0D%0A%0D%0A>`cat ${dir}top | awk 'NR=='$top_i | awk '{print $8" "$7}'`" - i=`expr $i + 1` - fi - top_i=`expr $top_i + 1` - done - echo -n $content >>${dir}content - rm -f ${dir}top >/dev/null 2>&1 - fi - - else - if [ ! -z "$network_enable" ] && [ "$network_enable" -eq "200" ] ; then - echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!!】当前网络不通!停止检测! " >> ${logfile} - network_enable="404" - fi - enable_detection $sleeptime - continue + usage + # 外网IP变化检测 + if [ ! -z "$serverchan_ipv4" ] && [ ! -z "$serverchan_ipv6" ] && [ "$serverchan_ipv4" -ne "0" ] || [ "$serverchan_ipv6" -ne "0" ] ; then + ip_changes fi + + # 设备下线检测 + # 从 ipAddress 文件中读取上次检测到的在线列表 + if [ -f ${dir}ipAddress ] ; then IPLIST=$( cat ${dir}ipAddress | awk '{print $1}' | grep -v "^$" | sort -u ) && IPLISTrow=$(grep -c "" ${dir}ipAddress);fi + for ip in $IPLIST; do + if [ ! -z "$ip" ] && [ `get_config send_enable` -ne 3 ] ; then + down $ip & + fi + done + wait + if [ "$IPLISTrow" -eq $(grep -c "" ${dir}ipAddress) ] ; then + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 没有检测到设备离线" >> ${logfile};fi + fi + unset IPLIST && unset IPLISTrow + + # 新设备接入检测 + # 从 arp 缓存中读取 0x2 在线列表 + if [ -f ${dir}ipAddress ] ; then IPLIST=$( cat /proc/net/arp | grep "0x2" | awk '{print $1}' | grep -v "^$" | sort -u ) && IPLISTrow=$(grep -c "" ${dir}ipAddress);fi + for ip in $IPLIST; do + # 如果 “ip 列表不为空” + if [ ! -z "$ip" ] && [ `get_config send_enable` -ne 3 ] ; then + up $ip & + fi + done + wait + if [ "$IPLISTrow" -eq $(grep -c "" ${dir}ipAddress) ] ; then + if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 没有新设备连接" >> ${logfile};fi + else + usage + fi + unset IPLIST && unset IPLISTrow + + # 当前设备列表 + if [ -f "${dir}content" ] && [ `get_config send_enable` -ne 3 ] ; then + current_device + fi + + # CPU 检测 + cpu_load send_enable=`get_config send_enable` if [ ! -z "$send_enable" ] && [ "$send_enable" -eq "3" ] ;then send_str=0 + deltemp while [ $send_enable -eq "3" ] ; do if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] && [ "$send_str" -eq "0" ] ; then @@ -1027,38 +900,22 @@ function rand_geturl(){ continue fi - enable_detection - -function serverchan_send(){ - if [ -f "${dir}title" ] ; then title=`cat ${dir}title` ;fi - if [ -f "${dir}content" ] ; then content=`cat ${dir}content` ;fi - if [ ! -z "$title" ] && [ ! -z "$content" ] ; then + if [ -f "${dir}title" ] && [ -f "${dir}content" ] ; then + title=`cat ${dir}title` + content=`cat ${dir}content` nowtime=`date "+%Y-%m-%d %H:%M:%S"` if [ ! -z "$device_name" ] ; then title="【$device_name】$title" ;fi - title=$( echo $title | sed $'s/\ /%20/g'| sed $'s/\"/%22/g'| sed $'s/\#/%23/g'| sed $'s/\&/%26/g'| sed $'s/\,/%2C/g'| sed $'s/\//%2F/g'| sed $'s/\:/%3A/g'| sed $'s/\;/%3B/g'| sed $'s/\=/%3D/g'| sed $'s/\@/%40/g') - content=$( echo $content| sed $'s/unknown/%e6%9c%aa%e7%9f%a5%e8%ae%be%e5%a4%87/') + title=$( echo $title | sed $'s/\ /%20/g'| sed $'s/\"/%22/g'| sed $'s/\#/%23/g'| sed $'s/\&/%26/g'| sed $'s/\,/%2C/g'| sed $'s/\//%2F/g'| sed $'s/\:/%3A/g'| sed $'s/\;/%3B/g'| sed $'s/\=/%3D/g'| sed $'s/\@/%40/g') if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 进行 URL 编码,标题=$title" >> ${logfile};fi - if [ ! -z "$serverchan_sheep" ] && [ "$serverchan_sheep" -eq "2" ] && [ ! -z "$starttime" ] && [ ! -z "$endtime" ] ;then - if [ `date +%H` -ge $endtime -a $starttime -lt $endtime ] || [ `date +%H` -lt $starttime -a $starttime -lt $endtime ] || [ `date +%H` -lt $starttime -a `date +%H` -ge $endtime -a $starttime -gt $endtime ] ; then - curl -s "http://sc.ftqq.com/$serverchan_sckey.send?text=${title}" -d "&desp=${nowtime}%0D%0A%0D%0A${content}" >/dev/null - else - if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 当前为免打扰时间,消息不发送" >> ${logfile};fi - fi + disturb=`serverchan_disturb` + if [ $disturb -eq "0" ] ;then + echo "`date "+%Y-%m-%d %H:%M:%S"` 【免打扰】当前为免打扰时间,消息不发送" >> ${logfile} else curl -s "http://sc.ftqq.com/$serverchan_sckey.send?text=${title}" -d "&desp=${nowtime}%0D%0A%0D%0A${content}" >/dev/null fi fi - unset title - unset content - rm -f ${dir}title >/dev/null 2>&1 - rm -f ${dir}content >/dev/null 2>&1 + deltemp if [ ! -z "$debuglevel" ] && [ "$debuglevel" -ne "1" ] ; then echo "`date "+%Y-%m-%d %H:%M:%S"` 【等待】我累了,$sleeptime 秒后再回来" >> ${logfile};fi enable_detection $sleeptime -} - serverchan_disturb - serverchan_send - continue done -echo "`date "+%Y-%m-%d %H:%M:%S"` 【!!!】程序未启用,退出脚本!" >> ${logfile} -exit \ No newline at end of file