You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

磁盘空间低于设定阈值时能否在Bash中挂起/暂停运行进程

磁盘不足自动暂停进程的Bash实现方案

完全可以在Bash环境下实现这类磁盘空间预警+进程管控逻辑,这也是小型生信服务器场景下,避免跑了数天的分析流程因磁盘写满崩溃的常用实操方案,没有技术卡点。

核心实现基础

实现逻辑的核心分三步:定时采集目标存储分区的可用空间、和预设阈值做比对、触发对应的进程挂起/恢复操作,不需要依赖复杂的第三方工具。

第一步:磁盘空间采集

生信分析的存储盘通常是单独挂载的分区(比如/data),不需要监控系统根分区的空间,用df命令就能精准提取指定分区的可用空间数值,示例命令:

# 提取/data分区的可用空间,单位为GiB,输出整数数值
available_gb=$(df --output=avail -BG /data | tail -n1 | tr -dc '0-9')

第二步:阈值判断与进程管控

这里需要避开一个常见认知误区:不要不分场景直接挂起所有进程,正确的分层管控逻辑既能防磁盘爆仓,也不会误操作导致流程损坏:

  • 先拦截新作业提交:低于阈值时直接阻断新的流程启动,避免新的大文件写入挤占剩余空间
  • 再挂起正在运行的分析进程:对已经在写临时文件的进程发送SIGSTOP暂停信号,进程的运行上下文、内存状态、已打开的文件句柄会完整保留,等磁盘空间充足时发送SIGCONT信号即可从暂停位置继续运行,不会丢失已完成的分析进度
  • 同步触发告警:挂起进程的同时推送通知,提醒及时清理临时文件、过期的分析结果

可直接复用的监控脚本示例

#!/bin/bash
# 自定义配置项
TARGET_MOUNT="/data"  # 需要监控的生信数据盘挂载点
THRESHOLD_GB=100      # 预设的空间阈值
# 获取当前分区可用空间
avail_gb=$(df --output=avail -BG "$TARGET_MOUNT" | tail -n1 | tr -dc '0-9')
# 空间低于阈值时触发操作
if [ "$avail_gb" -lt "$THRESHOLD_GB" ]; then
    # 匹配当前用户下的生信分析进程,发送STOP信号挂起
    # 可根据自己常用的分析工具调整匹配的进程名,避免误挂系统进程
    pkill -STOP -u $USER -f "(snakemake|nextflow|bwa|gatk|samtools|fastp)"
    # 发送告警提示
    echo "提示:$TARGET_MOUNT 剩余空间仅${avail_gb}GB,已暂停相关分析进程,请及时清理空间" > /var/tmp/disk_alert.log
fi

把这个脚本通过cron配置成每5分钟运行一次,就能实现持续监控:

# crontab -e 中添加以下行
*/5 * * * * /path/to/your/disk_watch.sh

实操注意事项

  • 一定要限定要挂起的进程范围,不要全量匹配所有进程,避免误挂SSH会话、监控脚本本身这类后台进程
  • 磁盘清理完成后,执行对应命令即可恢复所有被挂起的分析进程:
    pkill -CONT -u $USER -f "(snakemake|nextflow|bwa|gatk|samtools|fastp)"
    
  • 不要把阈值设得过低,生信单步分析动辄写入几十GB的临时文件,100GB的阈值刚好能留出足够的缓冲空间,避免进程触发挂起前就已经把磁盘写满
  • 这类实现方案之所以相关公开资料较少,是因为有正式作业调度系统(Slurm、SGE)的服务器大多会在调度层配置磁盘配额监控,个人小实验室的无调度服务器场景下,这类脚本基本都是运维人员自己留存使用,很少公开分享

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 19:45:09