概述
说明
不知道为什么我的frps会隔一阵子(大约48小时)会占满我的cpu,从而无法实现透传。(看起来这也像个病毒)我一般通过手动的重启服务解决, 但这样比较麻烦,所以通过脚本定时的来检查和解决。
内容
1 检查脚本autofrps.sh
这部分脚本主要参考这篇文章,我做了一些修改。原来统计cpu的负载不是很直观,我改为了cpu占用率。
#!/bin/bash
#filename auto_reboot.sh
# chmod u+x autofrps.sh
# 设置最大内存占用百分比
SV_MEM_MAX="85"
CPU_LOAD_MAX="99"
# 设置需要监控的服务名称
NAME="frps"
# 初始化内存统计
SV_MEM_SUM=`top -b -n 1 | grep $NAME |awk 'BEGIN{sum=0}{sum+=$10}END{print sum}'`
SV_CPU_SUM=`top -b -n 1 | grep $NAME |awk 'BEGIN{sum=0}{sum+=$9}END{print sum}'`
# 比较内存占用和系统负载是否超过阀值
MEM_VULE=`awk 'BEGIN{print('"$SV_MEM_SUM"'>='"$SV_MEM_MAX"'?"1":"0")}'`
LOAD_VULE=`awk 'BEGIN{print('"$SV_CPU_SUM"'>='"$CPU_LOAD_MAX"'?"1":"0")}'`
# 如果系统内存占用和系统负载超过阀值,则进行下面操作。
if [ $MEM_VULE = 1 ] || [ $LOAD_VULE = 1 ] ;then
# 写入日志
echo $(date +"%y-%m-%d %H:%M:%S") "killall $NAME" "(MEM:$SV_MEM_SUM,LOAD:$SV_CPU_SUM)">> /var/log/autoreboot_v2.log
# 正常停止服务
systemctl restart frps
#写入日志
echo $(date +"%y-%m-%d %H:%M:%S") "restart $NAME" >> /var/log/autoreboot.log
else
echo $(date +"%y-%m-%d %H:%M:%S") "$NAME very health!(MEM:$SV_MEM_SUM,LOAD:$SV_CPU_SUM)" > /var/log/testfrps_v2.log
fi
简单来说,设置一个内存和cpu的阈值,通过shell命令检查相关名字的进程占用的总内存和cpu,如果超过阈值则触发日志写入和核心的重启服务。
注意awk的写法,里面好几重引号,的确就是这样写的。另外如果变量为空会报语法错,我测试的时候被误导了。
2 cron设置
参考我关于cron任务的另一篇文章
2.1 修改一下编辑器
select-editor
2.2 添加任务
查看cron状态,确保运行
ps -ef | grep cron
service cron start/restart/stop
# 进入编辑状态
crontab -e
2.3 确保脚本运行权限
之前没加这句,crontab说没找到文件,linux有时候有点作
# 切换到对应目录下执行
chmod u+x autofrps.sh
2.4 查看状态
# 服务状态
systemctl status crond
# 当前任务
crontab -l
脚本中每分钟会做一次写入,正常的日志写到这里
└─ $ cat testfrps.log
21-07-05 18:55:01 frps very health!(MEM:.4,LOAD:0.00)
后记
成功完成一次过载检测和重启
最后
以上就是跳跃冰淇淋为你收集整理的Python 全栈系列113 -定时检查frps的内存/cpu占用并重启说明内容的全部内容,希望文章能够帮你解决Python 全栈系列113 -定时检查frps的内存/cpu占用并重启说明内容所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复