#!/bin/bash # heavy_run.sh — 研究型重负载受控运行器(2026-08-05 进程堆积/资源事故后立) # # 铁律:246 是生产命脉(frp/gitea/agentsmeeting/MoFin 都在上面)。 # 一切研究型重负载(全市场回测/批量采集/大规模分析)必须通过本脚本运行: # 1. flock 单重型任务锁 —— 同时只许一个重型任务存在 # 2. nice -19 + ionice 最低档 —— CPU/IO 让位于生产服务 # 3. systemd-run 内存/CPU 配额 —— MemoryMax 6G / CPUQuota 150%(防单进程吃光资源) # 4. 负载预检 —— load1 > 4 时拒绝启动(等闲了再说) # # 用法: nohup /home/hmo/MoFin/deploy/profile-scripts/heavy_run.sh /usr/bin/python3 /tmp/xxx.py > /tmp/xxx.log 2>&1 & LOCK=/tmp/heavy_run.lock LOAD_LIMIT=4 load1=$(awk '{print $1}' /proc/loadavg) if awk -v l="$load1" -v lim="$LOAD_LIMIT" 'BEGIN{exit !(l>lim)}'; then echo "[heavy_run] 当前负载 $load1 > $LOAD_LIMIT,拒绝启动重型任务(先等服务器闲下来)" >&2 exit 1 fi exec 9>"$LOCK" if ! flock -n 9; then pid=$(fuser "$LOCK" 2>/dev/null) echo "[heavy_run] 已有重型任务在跑(lock: $LOCK),拒绝并发启动" >&2 exit 1 fi echo "[heavy_run] 受控启动: $* (nice19/ionice低/MemoryMax6G/CPUQuota150%)" >&2 systemd-run --scope --quiet -p MemoryMax=6G -p CPUQuota=150% --nice=19 ionice -c2 -n7 "$@" rc=$? echo "[heavy_run] 任务结束 rc=$rc" >&2 exit $rc