@@ -33,7 +33,7 @@ usage() {
3333 无参数:gum 菜单(status / install / help / quit)。
3434
3535命令:
36- status [--no-http] 汇总 Airflow、Celery、Paperclip、code-server、new-api(PID、端口、可选 HTTP 探测)
36+ status [--no-http] 以表格汇总 Airflow、Celery、Paperclip、code-server、new-api(PID、端口、可选 HTTP 探测)
3737 install 无参:gum 先选「安装 / 卸载」,再选模块。
3838 install add <模块> 安装(add 可写 install)
3939 install remove <模块> 卸载(remove 可写 uninstall;celery/utils 不支持)
@@ -90,9 +90,22 @@ http_probe() {
9090 fi
9191}
9292
93- section () {
94- echo " "
95- echo " ── $* ──"
93+ # 制表符行 → column -t 对齐(无 column 时原样输出)
94+ _print_table () {
95+ if command -v column > /dev/null 2>&1 ; then
96+ column -t -s $' \t '
97+ else
98+ cat
99+ fi
100+ }
101+
102+ # 单行五列(服务、状态、PID、端口/访问、HTTP),字段内勿含制表符
103+ _status_row () {
104+ printf ' %s\t%s\t%s\t%s\t%s\n' " $1 " " $2 " " $3 " " $4 " " $5 "
105+ }
106+
107+ _mark_alive () {
108+ proc_alive " $1 " && printf ' %s' ' √' || printf ' %s' ' ×'
96109}
97110
98111cmd_status () {
@@ -127,7 +140,7 @@ cmd_status() {
127140 pid_cel_f=" $( read_pid_file " ${CELERY_RUN} /flower.pid" ) "
128141
129142 PAPERCLIP_SERVICE_HOME=" ${PAPERCLIP_SERVICE_HOME:- ${HOME} / opt/ paperclip} "
130- PAPERCLIP_PORT=" ${PAPERCLIP_PORT:- 3100 } "
143+ PAPERCLIP_PORT=" ${PAPERCLIP_PORT:- 8804 } "
131144 pid_pc=" $( read_pid_file " ${PAPERCLIP_SERVICE_HOME} /run/paperclip.pid" ) "
132145
133146 CODE_SERVER_SERVICE_HOME=" ${CODE_SERVER_SERVICE_HOME:- ${HOME} / opt/ code-server} "
@@ -139,66 +152,62 @@ cmd_status() {
139152 NEW_API_PORT=" ${NEW_API_PORT:- 3000} "
140153 pid_na=" $( read_pid_file " ${NEW_API_SERVICE_HOME} /run/new-api.pid" ) "
141154
142- echo " nltdeploy 服务概览(PID / 端口 / 地址)"
143- echo " 时间: $( date ' +%Y-%m-%d %H:%M:%S %z' ) "
144-
145- section " Airflow 3(standalone)"
146- echo " 名称: Airflow standalone"
147- echo " 安装: ${AIRFLOW_HOME} "
148- echo " PID 文件: ${AIRFLOW_PID_FILE} "
149- echo " 进程: $( status_word " $airflow_pid " ) ${airflow_pid:- -} "
150- echo " 端口: ${AIRFLOW_PORT} (环境变量 AIRFLOW__WEBSERVER__WEB_SERVER_PORT)"
151- echo " 地址: http://127.0.0.1:${AIRFLOW_PORT} /"
152- echo " 探测: $( http_probe " http://127.0.0.1:${AIRFLOW_PORT} /" ) "
153- echo " 详情: nlt-airflow status"
154-
155- section " Celery(worker / beat / flower)"
156- echo " 名称: Celery"
157- echo " 安装: ${CELERY_HOME} "
158- echo " 提示: Flower 默认端口与 Airflow Web 相同(8806);并行部署时请设置 FLOWER_PORT"
159- echo " worker: $( status_word " $pid_cel_w " ) PID ${pid_cel_w:- -} "
160- echo " beat: $( status_word " $pid_cel_b " ) PID ${pid_cel_b:- -} "
161- echo " flower: $( status_word " $pid_cel_f " ) PID ${pid_cel_f:- -} 端口 ${FLOWER_PORT} 监听 ${FLOWER_ADDRESS} "
155+ local ts flower_url cel_wbf cel_pids cel_probe
156+ ts=" $( date ' +%Y-%m-%d %H:%M:%S %z' ) "
157+
162158 if [[ " $FLOWER_ADDRESS " == " 0.0.0.0" ]]; then
163- echo " Flower URL: http://127.0.0.1:${FLOWER_PORT} /"
164- echo " 探测: $( http_probe " http://127.0.0.1:${FLOWER_PORT} /" ) "
159+ flower_url=" http://127.0.0.1:${FLOWER_PORT} /"
165160 else
166- echo " Flower URL: http://${FLOWER_ADDRESS} :${FLOWER_PORT} /"
167- echo " 探测: $( http_probe " http://${FLOWER_ADDRESS} :${FLOWER_PORT} /" ) "
161+ flower_url=" http://${FLOWER_ADDRESS} :${FLOWER_PORT} /"
168162 fi
169- echo " 详情: nlt-celery status"
170-
171- section " Paperclip"
172- echo " 名称: Paperclip"
173- echo " 安装: ${PAPERCLIP_SERVICE_HOME} "
174- echo " 进程: $( status_word " $pid_pc " ) ${pid_pc:- -} "
175- echo " 端口: ${PAPERCLIP_PORT} (PAPERCLIP_PORT)"
176- echo " 健康检查: http://127.0.0.1:${PAPERCLIP_PORT} /api/health"
177- echo " 探测: $( http_probe " http://127.0.0.1:${PAPERCLIP_PORT} /api/health" ) "
178- echo " 详情: nlt-paperclip status"
179-
180- section " code-server"
181- echo " 名称: code-server"
182- echo " 安装: ${CODE_SERVER_SERVICE_HOME} "
183- echo " 进程: $( status_word " $pid_cs " ) ${pid_cs:- -} "
184- echo " 绑定: ${CODE_SERVER_BIND} (CODE_SERVER_BIND)"
185- echo " 探测 URL: http://127.0.0.1:${CODE_SERVER_PORT} /"
186- echo " 探测: $( http_probe " http://127.0.0.1:${CODE_SERVER_PORT} /" ) "
187- echo " 详情: nlt-code-server status"
188-
189- section " new-api"
190- echo " 名称: new-api(QuantumNous/new-api)"
191- echo " 安装: ${NEW_API_SERVICE_HOME} "
192- echo " 进程: $( status_word " $pid_na " ) ${pid_na:- -} "
193- echo " 端口: ${NEW_API_PORT} (NEW_API_PORT / PORT)"
194- echo " 地址: http://127.0.0.1:${NEW_API_PORT} /"
195- echo " 探测: $( http_probe " http://127.0.0.1:${NEW_API_PORT} /" ) "
196- echo " 详情: nlt-new-api status"
197-
198- section " 工具(无统一守护进程)"
199- echo " nlt-pip-sources / nlt-python-env / nlt-utils / nlt-github-net"
200- echo " 请使用各命令的 install、status(若有)等子命令单独查看。"
163+ cel_probe=" $( http_probe " $flower_url " ) "
164+ cel_wbf=" $( _mark_alive " $pid_cel_w " ) $( _mark_alive " $pid_cel_b " ) $( _mark_alive " $pid_cel_f " ) "
165+ cel_pids=" ${pid_cel_w:- -} /${pid_cel_b:- -} /${pid_cel_f:- -} "
166+
167+ echo " nltdeploy 服务概览(表格) ${ts} "
168+ echo " "
201169
170+ {
171+ _status_row " 服务" " 状态" " PID" " 端口/访问" " HTTP"
172+ _status_row \
173+ " airflow" \
174+ " $( status_word " $airflow_pid " ) " \
175+ " ${airflow_pid:- -} " \
176+ " ${AIRFLOW_PORT} → 127.0.0.1:${AIRFLOW_PORT} " \
177+ " $( http_probe " http://127.0.0.1:${AIRFLOW_PORT} /" ) "
178+ _status_row \
179+ " celery" \
180+ " wbf ${cel_wbf} " \
181+ " ${cel_pids} " \
182+ " flower ${FLOWER_PORT} (${FLOWER_ADDRESS} )" \
183+ " ${cel_probe} "
184+ _status_row \
185+ " paperclip" \
186+ " $( status_word " $pid_pc " ) " \
187+ " ${pid_pc:- -} " \
188+ " ${PAPERCLIP_PORT} /api/health" \
189+ " $( http_probe " http://127.0.0.1:${PAPERCLIP_PORT} /api/health" ) "
190+ _status_row \
191+ " code-server" \
192+ " $( status_word " $pid_cs " ) " \
193+ " ${pid_cs:- -} " \
194+ " ${CODE_SERVER_BIND} " \
195+ " $( http_probe " http://127.0.0.1:${CODE_SERVER_PORT} /" ) "
196+ _status_row \
197+ " new-api" \
198+ " $( status_word " $pid_na " ) " \
199+ " ${pid_na:- -} " \
200+ " ${NEW_API_PORT} → 127.0.0.1:${NEW_API_PORT} " \
201+ " $( http_probe " http://127.0.0.1:${NEW_API_PORT} /" ) "
202+ } | _print_table
203+
204+ echo " "
205+ echo " 说明:"
206+ echo " • celery 状态列 wbf 为 worker / beat / flower:√ 运行中,× 未运行;与 Airflow 同机时请区分 FLOWER_PORT。"
207+ echo " • 安装路径: airflow ${AIRFLOW_HOME} | celery ${CELERY_HOME} | paperclip ${PAPERCLIP_SERVICE_HOME} | code-server ${CODE_SERVER_SERVICE_HOME} | new-api ${NEW_API_SERVICE_HOME} "
208+ echo " • 详情: nlt-airflow / nlt-celery / nlt-paperclip / nlt-code-server / nlt-new-api 各 status"
209+ echo " "
210+ echo " 工具(无统一守护进程): nlt-pip-sources / nlt-python-env / nlt-utils / nlt-github-net — 请用各命令单独查看。"
202211 echo " "
203212}
204213
0 commit comments