WIFIHELL - 科技改变生活

 找回密码
 注册WIFIHELL

QQ登录

只需一步,快速开始

开启左侧

[ASUS通用] 梅林迅雷脚本

[复制链接]
222ba 发表于 2017-3-18 11:34:44 | 显示全部楼层 |阅读模式

注册WIFIHELL,浏览更多技术贴!

您需要 登录 才可以下载或查看,没有账号?注册WIFIHELL

x

原文:点击前往










  1. #!/bin/sh
  2. #
  3. #迅雷远程 Xware V1 守护进程脚本
  4. #脚本版本:2016-12-04-001
  5. #改进作者:泽泽酷儿
  6. #1.本脚本仅适用于迅雷远程V1系列,启动时自动生成守护进程;使用者需自行手动设置自启动。直接运行命令为:sh /脚本路径/脚本名称;
  7. #2.可自动判断迅雷远程的关键进程崩溃情况,并自动重启;
  8. #3.适当限制线程数量区间,避免迅雷远程反复重启,避免设备 CPU 负载过大;
  9. #4.添加日志循环清空重写指令,避免日志叠加写入,避免浪费闪存空间,影响闪存寿命;
  10. #5.可自定义命令循环周期;
  11. #6.支持自动安装迅雷远程 Xware V1。只要把脚本的安装路径设置正确,运行脚本即可自动完成迅雷远程安装并启动守护进程。激活码的中文提示信息见日志;
  12. #
  13. SCRIPTS_DIR="/jffs/scripts"                                                                                                                                                                                #常规脚本保存路径,不可以自定义
  14. INSTALL_DIR=$(var=`find /jffs -name portal`;echo ${var%/portal})                                                                                                #自动识别 /jffs 分区的迅雷安装路径,无需自定义
  15. PROCESS_1=$(find /jffs -name portal|sed -r 's/(.*)\/(.*)\/(.*)/\2/')/lib                                                                                #自动识别守护进程名称,无需自定义
  16. LOCAL_FILE="$(basename "$0")"                                                                                                                                                                        #本脚本的文件名称,读取名称,不可以自定义
  17. LOCAL_DIR="$(cd "$(dirname "$0")"; pwd)"                                                                                                                                                #本脚本的保存路径,读取路径,不可以自定义
  18. if [ "$INSTALL_DIR" = "/jffs/.koolshare/thunder" ] || [ "$INSTALL_DIR" = "/koolshare/thunder" ]; then
  19.         STATE_TYPE="1"                                                                                                                                                                                                #Koolshare 软件中心版安装状态
  20.         LOG_DIR="/tmp"
  21.         CYCLE_1=$thunder_CYCLE_1
  22.         CYCLE_UNIT=$thunder_CYCLE_UNIT
  23. else
  24.         STATE_TYPE="2"                                                                                                                                                                                                #自行安装状态
  25.         LOG_DIR="$(cd "$(dirname "$0")"; pwd)"                                                                                                                                                #日志保存路径,可以自定义
  26.         CYCLE_1="10"                                                                                                                                                                                                #本脚本的循环执行周期数量
  27.         CYCLE_UNIT="m"                                                                                                                                                                                                #本脚本的循环执行周期单位(秒单位为s,分钟单位为m,小时单位为h)
  28. fi
  29. LOG_FILE="${LOCAL_FILE%.*}.log"                                                                                                                                                                        #日志文件名称,不可以自定义
  30. LOG_FULL="${LOG_DIR}"/"${LOG_FILE}"                                                                                                                                                                #日志文件完整路径
  31. CYCLE_UNIT_zh="分钟"
  32. if [ $CYCLE_UNIT = "h" ]; then
  33.         CYCLE_UNIT_zh="小时"
  34. elif [ $CYCLE_UNIT = "s" ]; then
  35.         CYCLE_UNIT_zh="秒"
  36. fi
  37. check_autorun()
  38. {
  39.         if [ "$STATE_TYPE" = "2" ]; then
  40.                 CWS_X="sh ${LOCAL_DIR}/${LOCAL_FILE} &"
  41.                 if [ -f "/usr/bin/dbus" ]; then
  42.                         EOC=`dbus list __|grep "${LOCAL_DIR}/"${LOCAL_FILE}""`
  43.                         Key1=`dbus list __|grep "${LOCAL_DIR}/"${LOCAL_FILE}""|awk -F = '{print $1}'`        
  44.                         Key2=`dbus list __|grep "${LOCAL_DIR}/"${LOCAL_FILE}""|awk -F = '{print $2}'`
  45.                         if [ "${EOC}" ]; then
  46.                                 echo "$(date +%Y年%m月%d日\ %X): 存在默认自启动方案,正在删除该方案……"
  47.                                 dbus remove "${Key1}" "${Key2}"
  48.                         fi
  49.                 fi
  50.                 if [ -f "${SCRIPTS_DIR}/wan-start" ]; then
  51.                         CWS=`cat ${SCRIPTS_DIR}/wan-start|grep "${CWS_X}"`
  52.                         if [ -z "${CWS}" ]; then
  53.                                 echo "$(date +%Y年%m月%d日\ %X): 调整自启动方案,启用多线程并发自启动方案……"
  54.                                 echo -e "${CWS_X}" >> "${SCRIPTS_DIR}/wan-start"
  55.                         else
  56.                                 echo "$(date +%Y年%m月%d日\ %X): 清除可能引起冲突的自启动命令……"
  57.                                 sed -i "/"${LOCAL_FILE}"/d" "${SCRIPTS_DIR}/wan-start"
  58.                                 echo "$(date +%Y年%m月%d日\ %X): 启用多线程并发自启动方案……"
  59.                                 echo -e "${CWS_X}" >> "${SCRIPTS_DIR}/wan-start"
  60.                         fi
  61.                 else
  62.                         cat > "${SCRIPTS_DIR}/wan-start" <<EOF
  63. #!/bin/sh
  64. ${CWS_X}
  65. EOF
  66.                 fi
  67.                 chmod 755 "${SCRIPTS_DIR}/wan-start"
  68.                 if [ -z "$(dbus list __|grep "${SCRIPTS_DIR}/wan-start")" ]; then
  69.                         echo "$(date +%Y年%m月%d日\ %X): 将多线程并发自启动脚本添加到系统自启动……"
  70.                         dbus event onwanstart_wan-start "${SCRIPTS_DIR}/wan-start"
  71.                 fi
  72.         fi
  73. }
  74. check_xware_process_quantity()
  75. {
  76.         process_of 'EmbedThunderManager|ETMDaemon|vod_httpserver'|wc -l
  77. }
  78. check_xware_process_details()
  79. {
  80.         echo "******************************    迅雷远程线程详情    ******************************"
  81.         process_of 'EmbedThunderManager|ETMDaemon|vod_httpserver'                                                                                                        #获取迅雷远程相关进程的所有线程详情
  82.         echo "**************************    迅雷远程的总线程数量:$(check_xware_process_quantity)    **************************"
  83. }
  84. check_xware_link_status()
  85. {
  86.         cd $INSTALL_DIR
  87.         rm -rf getsysinfo*
  88.         wget -c -N -q --tries=3 --timeout=5 -O getsysinfo http://127.0.0.1:9000/getsysinfo
  89.         if [ -e "getsysinfo" ]; then
  90.                 ACTIVE_CODE=`cut -d '"' -f2 getsysinfo`
  91.                 USER_ID=`cut -d '"' -f6 getsysinfo`
  92.                 VERSION=`cut -d '"' -f4 getsysinfo`
  93.                 echo "$(date +%Y年%m月%d日\ %X): 迅雷远程版本号是:V$VERSION"
  94.                 if [ $ACTIVE_CODE ]; then
  95.                         echo "$(date +%Y年%m月%d日\ %X): 你的迅雷远程激活码是:$ACTIVE_CODE"
  96.                         echo "$(date +%Y年%m月%d日\ %X): 迅雷远程尚未绑定用户及设备,请尽快完成绑定!"
  97.                 elif [ $USER_ID ]; then
  98.                         echo "$(date +%Y年%m月%d日\ %X): 设备绑定的用户名是:$USER_ID"
  99.                         echo "$(date +%Y年%m月%d日\ %X): 迅雷远程与服务器连接正常!"
  100.                 else
  101.                         echo "$(date +%Y年%m月%d日\ %X): 迅雷远程与服务器失去响应,正在重启……"
  102.                         ./portal>/dev/null 2>&1
  103.                         check_xware_process_details
  104.                         echo "$(date +%Y年%m月%d日\ %X): 迅雷远程已重启完成!"                                                
  105.                         wget -c -N -q --tries=3 --timeout=5 -O getsysinfo http://127.0.0.1:9000/getsysinfo
  106.                         if [ ! $ACTIVE_CODE ] && [ ! $USER_ID ]; then
  107.                                 echo "$(date +%Y年%m月%d日\ %X): 网络连接异常,请检查网络连接状态!"
  108.                         fi
  109.                 fi
  110.         else
  111.                 echo "$(date +%Y年%m月%d日\ %X): 迅雷远程安装错误,请重新安装……"
  112.         fi
  113. }
  114. create_xware_guard_monitor()
  115. {
  116.         cd /tmp
  117.         cat > "check_xware_guard.sh" <<EOF
  118. #!/bin/sh
  119. #
  120. check_xware_guard()
  121. {
  122. while true; do
  123.         sleep 1m
  124.         COUNT_xware_guard=\`ps|grep -E "${LOCAL_FILE}"|grep -v grep|wc -l\`
  125.         PID_xware_guard=\`ps|grep -E "${LOCAL_FILE}|sleep ${CYCLE_1}${CYCLE_UNIT}"|grep -v grep|awk '{print \$1}'\`
  126.         if [ "\${COUNT_xware_guard}" -gt "1" ]; then
  127.                 rm -rf "${LOG_FULL}"
  128.                 echo "\$(date +%Y年%m月%d日\ %X): 守护进程线程过多,正在重启守护进程……"
  129.                 kill \${PID_xware_guard}
  130.                 sh ${LOCAL_DIR}/${LOCAL_FILE}
  131.         elif [ "\${COUNT_xware_guard}" -eq "0" ]; then
  132.                 rm -rf "${LOG_FULL}"
  133.                 echo "\$(date +%Y年%m月%d日\ %X): 守护进程运行异常,正在重启守护进程……"
  134.                 sh ${LOCAL_DIR}/${LOCAL_FILE}
  135.         fi
  136. done
  137. }
  138. check_xware_guard>>${LOG_FULL} 2>&1 &
  139. EOF
  140.         chmod 755 "check_xware_guard.sh"
  141. }
  142. check_xware_guard_process()
  143. {
  144.         create_xware_guard_monitor
  145.         COUNT_check_xware_guard=`process_of check_xware_guard|wc -l`
  146.         if [ "${COUNT_check_xware_guard}" -eq "0" ]; then
  147.                 sh check_xware_guard.sh
  148.         fi
  149. }
  150. download_script()
  151. {
  152.         cd $INSTALL_DIR
  153.         script=$(echo "$@" | awk '{ print substr($0, index($0,$5)) }');
  154.         for i in $script; do
  155.                 wget -c -N -q --tries=3 --timeout=15 ftp://koolshare:koolshare@andywoo.vicp.cc/sda1/Scripts/$i
  156.                 MD5_1=`md5sum $(ls|grep xunlei-)|cut -d ' ' -f1|tr '[a-z]' '[A-Z]'`
  157.                 MD5_2=`ls|grep xunlei-|awk -F _ '{print $2}'|cut -d '.' -f1`
  158.                 if [ -e $i ]; then
  159.                         if [ $MD5_1 != $MD5_2 ]; then
  160.                                 echo "$(date +%Y年%m月%d日\ %X): 已下载新的文件!"
  161.                                 echo "$(date +%Y年%m月%d日\ %X): MD5 校验不一致,请检查网络连接状态后重试!"
  162.                                 rm -rf $i
  163.                         else
  164.                                 echo "$(date +%Y年%m月%d日\ %X): 已下载新的文件!"
  165.                                 echo "$(date +%Y年%m月%d日\ %X): MD5 校验一致!"
  166.                         fi
  167.                 else
  168.                         echo "$(date +%Y年%m月%d日\ %X): 网络连接存在问题或服务器上无相应文件!"
  169.                 fi                        
  170.         done
  171. }        
  172. auto_upgrade_script()
  173. {
  174.         cd ${LOCAL_DIR}
  175.         echo "$(date +%Y年%m月%d日\ %X): 正在连接服务器,检查更新脚本……"
  176.         download_script xunlei-*.sh
  177.         if [ -e xunlei-*.sh ]; then
  178.                 if [ $(diff xunlei-*.sh ${LOCAL_FILE} -q|grep -q differ && echo 1 || echo 0) -eq 1 ]; then
  179.                         echo "$(date +%Y年%m月%d日\ %X): 正在更新新版脚本……"
  180.                         mv -f xunlei-*.sh ${LOCAL_FILE}
  181.                         chmod +x ${LOCAL_FILE}
  182.                         echo "$(date +%Y年%m月%d日\ %X): 正在重新运行脚本……"
  183.                         exec ./${LOCAL_FILE}
  184.                 elif [ $(diff xunlei-*.sh ${LOCAL_FILE} -q|grep -q differ && echo 1 || echo 0) -eq 0 ]; then
  185.                         echo "$(date +%Y年%m月%d日\ %X): 脚本版本未更新!"
  186.                         rm -rf xunlei-*.sh
  187.                         echo "$(date +%Y年%m月%d日\ %X): 继续运行当前脚本……"
  188.                         check_xware>>"${LOG_FULL}" 2>&1
  189.                 fi
  190.         else
  191.                         echo "$(date +%Y年%m月%d日\ %X): 继续运行当前脚本……"
  192.                         check_xware>>"${LOG_FULL}" 2>&1
  193.         fi
  194. }
  195. process_of()
  196. {
  197.         process=$(echo "$@" | awk '{ print substr($0, index($0,$5)) }');
  198.         for i in $process; do
  199.                 ps|grep -E $i|grep -v grep
  200.         done
  201. }
  202. check_xware()
  203. {
  204.         if [ "$STATE_TYPE" = "2" ]; then
  205.                 echo "$(date +%Y年%m月%d日\ %X): 已检测到自行安装的迅雷远程,正在启动插件……"
  206.         elif [ "$STATE_TYPE" = "1" ]; then
  207.                 echo "$(date +%Y年%m月%d日\ %X): 已检测到 Koolshare 梅林固件软件中心的迅雷远程,将优先启动该插件……"
  208.         fi
  209.         echo "$(date +%Y年%m月%d日\ %X): 迅雷远程的安装路径为 "$INSTALL_DIR",守护进程的名称为 "$PROCESS_1""
  210.         echo "$(date +%Y年%m月%d日\ %X): 当前脚本的绝对路径为 "$LOCAL_DIR",脚本的文件名称为 "$LOCAL_FILE""
  211.         echo "$(date +%Y年%m月%d日\ %X): 导出日志的绝对路径为 "$LOG_DIR",日志的文件名称为 "$LOG_FILE""        
  212.         check_autorun
  213.         COUNT_1=$(check_xware_process_quantity)                                                                                                                                                #统计迅雷远程相关进程的总线程数量
  214.         check_xware_process_details
  215.         cd $INSTALL_DIR
  216.         chmod 777 * -R
  217.         if [ -e lib ]; then
  218.                 if [ -z "$(process_of 'EmbedThunderManager')" ]||[ -z "$(process_of 'ETMDaemon')" ]||[ -z "$(process_of 'vod_httpserver')" ]; then                                        #判断迅雷远程关键进程如果没有全部正在运行
  219.                         echo "$(date +%Y年%m月%d日\ %X): 迅雷远程关键进程未运行,正在启动……"
  220.                         ./portal>/dev/null 2>&1                                                                                                                                                                #重新启动迅雷远程
  221.                         check_xware_process_details
  222.                         echo "$(date +%Y年%m月%d日\ %X): 迅雷远程已启动完成!"
  223.                 elif [ "$(process_of 'EmbedThunderManager')" ]&&[ "$(process_of 'ETMDaemon')" ]&&[ "$(process_of 'vod_httpserver')" ]; then                                                        #判断迅雷远程关键进程如果全部正在运行
  224.                         if [ "${COUNT_1}" -lt "3" ]; then                                                                                                                                        #判断迅雷远程线程数量小于3
  225.                                 echo "$(date +%Y年%m月%d日\ %X): 迅雷远程运行异常,正在重启……"
  226.                                 ./portal>/dev/null 2>&1                                                                                                                                                        #重新启动迅雷远程
  227.                                 check_xware_process_details
  228.                                 echo "$(date +%Y年%m月%d日\ %X): 迅雷远程已重启完成!"
  229.                         elif [ "${COUNT_1}" -ge "3" ]&&[ "${COUNT_1}" -le "15" ]; then                                                                                #判断迅雷远程线程数量大于或等于3且小于或等于15
  230.                                 echo "$(date +%Y年%m月%d日\ %X): 迅雷远程运行正常!"
  231.                         elif [ "${COUNT_1}" -gt "15" ]; then                                                                                                                                #判断迅雷远程线程数量大于15
  232.                                 echo "$(date +%Y年%m月%d日\ %X): 迅雷远程线程过多,设备负载过大,正在重启……"
  233.                                 ./portal>/dev/null 2>&1                                                                                                                                                        #重新启动迅雷远程
  234.                                 check_xware_process_details
  235.                                 echo "$(date +%Y年%m月%d日\ %X): 迅雷远程已重启完成!"
  236.                         fi
  237.                 fi
  238.         elif [ -e portal ]; then
  239.                 echo "$(date +%Y年%m月%d日\ %X): 已检测到迅雷远程安装包,正在进行安装……"
  240.                 ./portal>/dev/null 2>&1
  241.                 check_xware_process_details
  242.                 echo "$(date +%Y年%m月%d日\ %X): 迅雷远程安装完成!"
  243.         else
  244.                 echo "$(date +%Y年%m月%d日\ %X): 迅雷远程未安装或安装路径设置错误,请检查安装情况并设置正确的安装路径!"
  245.         fi
  246.         check_xware_link_status
  247.         echo "$(date +%Y年%m月%d日\ %X): 守护进程的检查周期为 ${CYCLE_1} ${CYCLE_UNIT_zh},本日志将在 ${CYCLE_1} ${CYCLE_UNIT_zh}后更新!"
  248. }
  249. while true; do
  250.         if [ "$STATE_TYPE" = "2" ]; then
  251.                 auto_upgrade_script>>"${LOG_FULL}" 2>&1 &
  252.         elif [ "$STATE_TYPE" = "1" ]; then
  253.                 eval `dbus export thunder`                                                                                                                                                                # 导入skipd中储存的数据
  254.                 check_xware>>"${LOG_FULL}" 2>&1 &
  255.         fi
  256.         check_xware_guard_process>>/dev/null 2>&1
  257.         sleep ${CYCLE_1}${CYCLE_UNIT}                                                                                                                                                                #本脚本的循环执行周期(秒单位为s,分钟单位为m,小时单位为h)
  258.         rm -rf "${LOG_FULL}"                                                                                                                                                                                #清空日志内容(按周期循环重写,日志文件体积不会无限变大。如果需要查看历史日志,本行命令可以删除或用#注释掉)
  259. done &
复制代码


WIFIHELL | 万丰乐活 2020开启新的征程,好货不断!
关闭

站点推荐上一条 /1 下一条

万丰乐活

GMT+8, 2024-12-22 00:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表