我是靠谱客的博主 跳跃冰淇淋,最近开发中收集的这篇文章主要介绍Python 全栈系列113 -定时检查frps的内存/cpu占用并重启说明内容,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

说明

不知道为什么我的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占用并重启说明内容所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部