Repository navigation
Expand file tree
/
Copy pathstart.sh
More file actions
195 lines (173 loc) · 5.54 KB
/
Copy pathstart.sh
File metadata and controls
195 lines (173 loc) · 5.54 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#!/bin/bash
# ============================================================================
# 冷热数据调度系统 — 启动/停止/状态管理脚本
# ============================================================================
# 用法:
# ./start.sh 前台启动(Ctrl+C 停止)
# ./start.sh --daemon 后台守护进程启动
# ./start.sh --config config_fiu.json 指定配置文件
# ./start.sh --monitor 前台启动 + 实时监控仪表盘
# ./start.sh --dry-run 模拟启动(仅检查 + 显示配置)
# ./start.sh demo 运行全部演示程序
# ./start.sh check 前置依赖检查
# ./start.sh stop 停止后台守护进程
# ./start.sh status 查看运行状态
# ============================================================================
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR"
RUN_PY="$SCRIPT_DIR/run.py"
LOG_DIR="$SCRIPT_DIR/output"
# ── 颜色(BSD sed 兼容,仅 tty 输出) ──
if [ -t 1 ]; then
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'
CYAN='\033[0;36m'; BOLD='\033[1m'; NC='\033[0m'
else
RED=''; GREEN=''; YELLOW=''; CYAN=''; BOLD=''; NC=''
fi
info() { echo -e "${CYAN}◆${NC} $*"; }
ok() { echo -e "${GREEN}✓${NC} $*"; }
warn() { echo -e "${YELLOW}⚠${NC} $*"; }
err() { echo -e "${RED}✗${NC} $*"; }
# ── 帮助 ──
usage() {
cat <<'HELP'
冷热数据调度系统 — 启动/停止/状态管理脚本
用法:
./start.sh 前台启动(Ctrl+C 停止)
./start.sh --daemon 后台守护进程启动
./start.sh --config config_fiu.json 指定配置文件
./start.sh --monitor 前台启动 + 实时监控仪表盘
./start.sh --dry-run 模拟启动(仅检查 + 显示配置)
./start.sh demo 运行全部演示程序
./start.sh check 前置依赖检查
./start.sh stop 停止后台守护进程
./start.sh status 查看运行状态
示例:
./start.sh 开发测试,前台运行
./start.sh --daemon 生产部署,后台运行
./start.sh --monitor 需要实时观察调度效果时使用
./start.sh demo 首次使用,体验系统功能
./start.sh check 排查环境问题时使用
HELP
exit 0
}
# ── Shell 级前置检查 ──
check_prereqs() {
local all_ok=true
echo ""
info "前置依赖检查"
echo ""
# 1. Python
if command -v python3 &>/dev/null; then
pyver=$(python3 --version 2>&1)
ok "Python ${pyver#Python }"
else
err "Python3 未安装"
all_ok=false
fi
# 2. run.py
if [ -f "$RUN_PY" ]; then
ok "入口 run.py 存在"
else
err "入口 run.py 不存在"
all_ok=false
fi
# 3. CephFS 挂载(尝试自动挂载)
if mount | grep -qE "fuse|ceph-fuse|tierfs"; then
ok "CephFS 已挂载"
else
if [ -f "$SCRIPT_DIR/utils/mount.sh" ]; then
warn "CephFS 未检测到挂载点,尝试自动挂载..."
if bash "$SCRIPT_DIR/utils/mount.sh" 2>/dev/null; then
ok "CephFS 自动挂载成功"
else
err "CephFS 自动挂载失败"
all_ok=false
fi
else
warn "CephFS 未检测到挂载点(可启动后手动挂载)"
fi
fi
# 4. 配置文件
if [ -f "$SCRIPT_DIR/config.json" ]; then
ok "配置 config.json 存在"
else
warn "配置 config.json 不存在"
fi
echo ""
if $all_ok; then
ok "环境就绪"
else
warn "部分检查未通过"
fi
echo ""
}
# ── 状态查看 ──
check_status() {
if [ -f "$SCRIPT_DIR/.scheduler.pid" ]; then
local pid
pid=$(cat "$SCRIPT_DIR/.scheduler.pid")
if kill -0 "$pid" 2>/dev/null; then
info "调度器运行中 (PID=$pid)"
else
warn "调度器未运行(残留 PID 文件已清理)"
rm -f "$SCRIPT_DIR/.scheduler.pid"
fi
else
info "调度器未运行"
fi
}
# ── 参数转发 ──
ARGS=()
HAS_CONFIG=false
HAS_DAEMON=false
HAS_MONITOR=false
HAS_DRY=false
ACTION=""
for arg in "$@"; do
case "$arg" in
--daemon|start) HAS_DAEMON=true ;;
--monitor) HAS_MONITOR=true ;;
--dry-run) HAS_DRY=true ;;
--config|-c) HAS_CONFIG=true ;;
-h|--help) usage ;;
check|status|stop|demo) ACTION="$arg" ;;
*) ARGS+=("$arg") ;;
esac
done
# ── 动作调度 ──
case "$ACTION" in
check)
check_prereqs
python3 "$RUN_PY" check
;;
status)
check_status
python3 "$RUN_PY" --dry-run 2>/dev/null || true
;;
stop)
python3 "$RUN_PY" stop
;;
demo)
check_prereqs
echo ""
python3 "$RUN_PY" demo
;;
esac
# ── 如果指定了 action 就不再往下执行 ──
[ -n "$ACTION" ] && exit 0
# ── 非 action 模式:启动调度器 ──
if $HAS_DAEMON; then
check_prereqs
exec python3 "$RUN_PY" start "${ARGS[@]}"
elif $HAS_DRY; then
check_prereqs
exec python3 "$RUN_PY" --dry-run "${ARGS[@]}"
elif $HAS_MONITOR; then
check_prereqs
exec python3 "$RUN_PY" run --monitor "${ARGS[@]}"
else
check_prereqs
exec python3 "$RUN_PY" run "${ARGS[@]}"
fi