Files
MoFin/deploy/profile-scripts/heavy_run.sh
T
xxm 4baa1542ca feat: heavy_run.sh 重型任务受控运行器(防资源事故)
- flock单重型任务锁(同时只许一个)
- nice19+ionice最低档(让位生产服务)
- systemd-run MemoryMax6G/CPUQuota150%(防单进程吃光)
- load1>4拒绝启动(负载预检)
铁律: 246是生产命脉, 研究型重负载必须经此脚本运行
2026-08-05 15:07:47 +08:00

33 lines
1.4 KiB
Bash
Executable File

#!/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