Repository navigation
Expand file tree
/
Copy pathesa_daycycle.sh
More file actions
executable file
·77 lines (67 loc) · 2.26 KB
/
Copy pathesa_daycycle.sh
File metadata and controls
executable file
·77 lines (67 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/usr/bin/env bash
# ESA 每日定时开停控制脚本(部署在登录节点 choud-mgt-09,系统时区为 UTC)
#
# cron(北京时间 = UTC+8,时间已换算):
# 30 23 * * * -> 北京时间 07:30 start
# 0 13 * * * -> 北京时间 21:00 stop
#
# start:若没有同名作业则 sbatch 提交 esa_daycycle.job(固定 gpu41)
# stop :先向 run_esa_stack.sh 发 SIGTERM 触发其 trap cleanup 优雅关停
# (避免硬杀留下 NFS 陈旧锁),超过 3 分钟未退完才强制 KILL。
set -Eeuo pipefail
PROJECT_ROOT="/remote_dir/home/chenxuzhao/esa"
JOB_NAME="esa-daycycle"
USER_NAME="$(id -un)"
current_job() {
# 返回 "JOBID STATE",没有则返回空
squeue -u "$USER_NAME" -n "$JOB_NAME" -h -o '%i %T' | head -1
}
start() {
local line
line="$(current_job)"
if [[ -n "$line" ]]; then
echo "[daycycle] 已有作业在跑:$line,跳过启动"
return 0
fi
mkdir -p "$PROJECT_ROOT/logs"
sbatch "$PROJECT_ROOT/esa_daycycle.job"
}
stop() {
local line jid
line="$(current_job)"
if [[ -z "$line" ]]; then
echo "[daycycle] 没有在跑的 $JOB_NAME 作业,无需停止"
return 0
fi
jid="${line%% *}"
echo "[daycycle] 优雅停止作业 $jid:向 run_esa_stack.sh 发送 SIGTERM"
# 兼容各种启动方式(sbatch / srun --pty 交互式):直接命中脚本进程触发 trap
srun --jobid="$jid" --overlap --immediate=120 \
bash -c 'pkill -TERM -f "backend/scripts/run_esa_stack.sh" || true' \
>/dev/null 2>&1 || true
# 最多等 3 分钟让 trap cleanup 走完(backend -> MinerU -> vLLM -> qdrant)
for _ in $(seq 1 36); do
sleep 5
if [[ -z "$(squeue -u "$USER_NAME" -j "$jid" -h -o '%i')" ]]; then
echo "[daycycle] 作业 $jid 已优雅退出"
return 0
fi
done
echo "[daycycle] 3 分钟未退完,强制 KILL 作业 $jid"
scancel -s KILL "$jid"
}
status() {
local line
line="$(current_job)"
if [[ -n "$line" ]]; then
echo "[daycycle] 运行中:$line"
else
echo "[daycycle] 未运行"
fi
}
case "${1:-status}" in
start) start ;;
stop) stop ;;
status) status ;;
*) echo "用法: $0 {start|stop|status}" >&2; exit 2 ;;
esac