找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 637|回复: 7

OPenwrt 运行脚本 ,判断条件报错,求大佬帮忙看看

[复制链接]
发表于 2021-6-13 01:49 | 显示全部楼层 |阅读模式

脚本功能是获取CPU占用率,占用超过设定值则重启

运行结果,求大佬看看,while 和if 的判断都提示bad number ,是什么原因呢?
  1. root@OpenWrt:/# sh /root/CPU_detection.sh  restart
  2. 1
  3. 12.43781094527363184100
  4. sh: 12.43781094527363184100: bad number
  5. 3
  6. 4
  7. sh: 2.49376558603491271900: bad number
  8. root@OpenWrt:/#
复制代码



脚本内容
  1. #!/bin/sh

  2. #gino
  3. #20150711
  4. #CPU占用过高自动重启

  5. CPULOG_1=`cat /proc/stat | head -n1 | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}'`
  6. SYS_IDLE_1=`echo $CPULOG_1 | awk '{print $4}'`
  7. Total_1=`echo $CPULOG_1 | awk '{print $1+$2+$3+$4+$5+$6+$7}'`

  8. sleep 1

  9. CPULOG_2=`cat /proc/stat | head -n1 | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}'`
  10. SYS_IDLE_2=`echo $CPULOG_2 | awk '{print $4}'`
  11. Total_2=`echo $CPULOG_2 | awk '{print $1+$2+$3+$4+$5+$6+$7}'`
  12. Total=`expr $Total_2 - $Total_1`
  13. SYS_IDLE=`expr $SYS_IDLE_2 - $SYS_IDLE_1`
  14. SYS_USAGE=`echo $SYS_IDLE/$Total*100 |bc -l`
  15. SYS_Rate=`echo 100-$SYS_USAGE |bc -l`
  16. echo '1'
  17. sleep 1

  18. echo ${SYS_Rate}

  19. #循环判断
  20. while [ ${SYS_Rate} -le 10 ]
  21. do
  22.         echo '2'
  23.         CPULOG_1=`cat /proc/stat | head -n1 | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}'`
  24.         SYS_IDLE_1=`echo $CPULOG_1 | awk '{print $4}'`
  25.         Total_1=`echo $CPULOG_1 | awk '{print $1+$2+$3+$4+$5+$6+$7}'`
  26.         sleep 1
  27.         CPULOG_2=`cat /proc/stat | head -n1 | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}'`
  28.         SYS_IDLE_2=`echo $CPULOG_2 | awk '{print $4}'`
  29.         Total_2=`echo $CPULOG_2 | awk '{print $1+$2+$3+$4+$5+$6+$7}'`
  30.         Total=`expr $Total_2 - $Total_1`
  31.         SYS_IDLE=`expr $SYS_IDLE_2 - $SYS_IDLE_1`
  32.         SYS_USAGE=`echo $SYS_IDLE/$Total*100 |bc -l`
  33.         SYS_Rate=`echo 100-$SYS_USAGE |bc -l`
  34.         sleep 1
  35. done

  36. echo '3'

  37. #再次检测
  38. CPULOG_1=`cat /proc/stat | head -n1 | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}'`
  39. SYS_IDLE_1=`echo $CPULOG_1 | awk '{print $4}'`
  40. Total_1=`echo $CPULOG_1 | awk '{print $1+$2+$3+$4+$5+$6+$7}'`
  41. sleep 1
  42. CPULOG_2=`cat /proc/stat | head -n1 | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}'`
  43. SYS_IDLE_2=`echo $CPULOG_2 | awk '{print $4}'`
  44. Total_2=`echo $CPULOG_2 | awk '{print $1+$2+$3+$4+$5+$6+$7}'`
  45. Total=`expr $Total_2 - $Total_1`
  46. SYS_IDLE=`expr $SYS_IDLE_2 - $SYS_IDLE_1`
  47. SYS_USAGE=`echo $SYS_IDLE/$Total*100 |bc -l`
  48. SYS_Rate=`echo 100-$SYS_USAGE |bc -l`

  49. echo '4'

  50. #是否触发重启条件
  51. if [ ${SYS_Rate} -ge 10 ];then
  52.     reboot
  53. else
  54.     exit 0
  55.     echo '5'
  56. fi
  57. #————————————————
  58. #版权声明:本文为CSDN博主「linux_zhu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
  59. #原文链接:https://blog.csdn.net/u011641885/article/details/46845625
复制代码





我的恩山、我的无线 The best wifi forum is right here.
发表于 2021-6-13 08:59 | 显示全部楼层
只能整数判断,明白了?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2021-6-13 09:00 | 显示全部楼层
如不是软路由,你cpu每秒运行一次这脚本都去了半条命了
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2021-6-13 09:07 | 显示全部楼层
一检测到CPU使用率过高就重启这是相当愚蠢的做法,CPU是动态使用的,某时执行任务时会有一两秒或者几秒很高,最好做法应该是持续多少分钟都过高就重启,但为什么要重启这么愚蠢?只杀死占用CPU过高的进程不好?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2021-6-13 14:12 | 显示全部楼层
wulishui 发表于 2021-6-13 08:59
只能整数判断,明白了?

好的,已经解决了,不报错了现在
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2021-6-13 14:13 | 显示全部楼层
wulishui 发表于 2021-6-13 09:00
如不是软路由,你cpu每秒运行一次这脚本都去了半条命了

为什么呢?我刚接触脚本,不太懂
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2021-6-13 14:14 | 显示全部楼层
wulishui 发表于 2021-6-13 09:07
一检测到CPU使用率过高就重启这是相当愚蠢的做法,CPU是动态使用的,某时执行任务时会有一两秒或者几秒很高 ...

怎么杀CPU占用最高的进程我还不会,这样确实比重启更好,重启会有10-20s的断网间隔
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2021-6-13 14:21 | 显示全部楼层
wulishui 发表于 2021-6-13 09:07
一检测到CPU使用率过高就重启这是相当愚蠢的做法,CPU是动态使用的,某时执行任务时会有一两秒或者几秒很高 ...

还有个问题,脚本里面增加了输出结果到文件,我用ttyd终端执行脚本,可以在脚本目录下找到输出的文件,但是在计划任务里自动执行,就找不到输出的文件,请问是为什么呢?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-26 03:19

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

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