根据条件关闭软件

news/2025/2/4 17:54:31/

使用下载工具时,经常出现磁盘空间已满,无法下载的情况。

使用shell写一个监控,每2分钟执行一次。判断当前磁盘的空间,低于2G时,关闭下载软件。


获取空间大小


➜  ~ df -h                                                
Filesystem       Size   Used  Avail Capacity iused      ifree %iused  Mounted on
/dev/disk1s5s1  233Gi   14Gi  9.0Gi    62%  553757 2447547563    0%   /
devfs           196Ki  196Ki    0Bi   100%     678          0  100%   /dev
/dev/disk1s4    233Gi  1.0Gi  9.0Gi    10%       1 2448101319    0%   /System/Volumes/VM
/dev/disk1s2    233Gi  300Mi  9.0Gi     4%    1209 2448100111    0%   /System/Volumes/Preboot
/dev/disk1s6    233Gi  920Ki  9.0Gi     1%      17 2448101303    0%   /System/Volumes/Update
/dev/disk1s1    233Gi  208Gi  9.0Gi    96% 1517128 2446584192    0%   /System/Volumes/Data
map auto_home     0Bi    0Bi    0Bi   100%       0          0  100%   /System/Volumes/Data/home

可通过

df -h | grep "/$" | awk '{print $4}' | sed 's/Gi/ /g'

获取当前磁盘的剩余空间

alt




获取下载软件的pid并关闭


通过

ps -ef | grep /Applications/Thunder.app/Contents/MacOS/Thunder | grep -v grep | cut -c 7-15

可得到pid。


使用

ps -ef | grep /Applications/Thunder.app/Contents/MacOS/Thunder | grep -v grep | cut -c 7-15 | xargs kill -9

关闭该进程。

命令详解 参见 批量kill掉包含某个关键字的进程




写成shell脚本,并配置定时任务


shell脚本

#!/bin/bashspareDisk=$(df -h | grep "/$" | awk '{print $4}' | sed 's/Gi/ /g')echo '当前剩余空间'$spareDisk'GB'#echo "scale=0; ($spareDisk - 2)" | bc safeDisk=$(echo "scale=0; ($spareDisk - 2)/1" | bc)echo '当前空间离2GB还剩'$safeDisk'GB'if [ $safeDisk -gt 0 ]
thenecho '安全'
elseps -ef | grep /Applications/Thunder.app/Contents/MacOS/Thunder |  grep -v grep | cut -c 7-15 | xargs kill -9echo '空间不足,已关闭软件'
fi

配置crontab

crontab -e

*/3 * * * * /Users/xxxxx/kill.sh > space_check.log

每3分钟检查一次~


参考:

Linux bc 命令

bc 命令是任意精度计算器语言,通常在linux下当计算器用。

scale=2 设小数位,2 代表保留两位:

echo 'scale=2; (2.777 - 1.4744)/1' | bc
1.30

(/1是为使精确到小数点后2位生效)

本文由 mdnice 多平台发布


http://www.ppmy.cn/news/1120737.html

相关文章

数字IC验证高频面试问题整理—附答案(四)

好久没更新面试题目了,不少同学在后台催更,这不就来了~ 共150道验证高频面试题整理~含答案(文末可领取全部题目) Q1.illegal_bins和ignore_bins命中分别会怎么样?命中是否会计入覆盖率统计 illegal_bins 表示非法的…

数据结构(持续更新)

嗯,怎么说数据结构果然很玄妙。按照能不能存储多行元素大致分为两类。 不能存好几行的数据包括pair,int,float,double,char,struct; 能存好几行的:map,unordered_map,list,vector,set,string,array。 1. pair “pair” 是 C++ 标准库中的一个模板类,它用于存储…

09_CSS3多媒体查询

1 多媒体查询 1.1 媒体查询 媒体查询能在不同的条件下使用不同的样式,使页⾯在不同在终端设备下达到不同的渲染效果。 CSS 的 Media Query 媒体查询(也称为媒介查询)用来根据窗口宽度、屏幕比例和设备方向等差异来改变页面的显示方式。 使…

Failed to connect to bitbucket.org port 443 错误原因, 解决办法

最近使用SourceTree来访问bitbucket.org的代码托管Git, 当Pull或者Push发现操作失败: Failed to connect to bitbucket.org port 443 错误原因: 无法链接到网站地址, 可能是DNS解析IP地址错误, 或者网站维护, 大概率是被墙或者DNS解析错误. 解决办法: 如果您的浏览器能够访问b…

字符串 (3)--- KMP 算法的扩展

对于个长度为n的字符串s。定义函数z[i]表示s和s[i,n-1](即以 s[i] 开头的后缀)的最长公共前缀(LCP)的长度。z被称为s的Z函数。特别地,z[0] 0。 如同大多数字符串主题所介绍的算法,其关键在于,…

APIFOX公共脚本

APIFOX公共脚本 从参数中获取数据加密放入请求头中调用接口获取token放入全局变量中 从参数中获取数据加密放入请求头中 var paramJson JSON.parse(pm.request.body.raw) console.log(paramJson); var params1 paramJson.params1; var params2 paramJson.params2;var md5_sig…

嵌入式MCU都有什么高级用法?

嵌入式MCU都有什么高级用法? 您举的几个例子,确实是MCU外设的一些高端玩法。只是不知道您是否想过,既然这些机制是被 人设计出来的,那它就是种标准用法。从微控制器的发展历程来看,许多硬件机制都是有了实际 需求后才…

SpringBoot轻松实现项目集成Knife4j接口文档

Knife4j 介绍 Knife4j 官网 Knife4j是一款基于Swagger生成API文档的增强工具,它简化了开发者构建和管理RESTful API文档的过程。通过自动扫描项目中的接口信息,Knife4j能够生成详细、易读的API文档,无需手动编写和维护。它提供交互式的接口调…