You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shell脚本中同时运行Flask与Prometheus服务?

如何在Shell脚本中同时启动Flask和Prometheus服务器

你的问题出在Shell脚本的同步执行机制:默认情况下,脚本会等待当前命令执行完成(进程退出)才会执行下一行代码。python hello.py启动Flask后会一直前台运行,直接阻塞了后续的Prometheus启动命令。

下面是两种可行的修改方案:

方案1:直接后台运行进程

在启动命令末尾添加&,将进程放到后台执行,脚本会继续执行后续命令。同时建议重定向日志到文件,方便后续排查问题:

#!/bin/bash

# 激活Flask虚拟环境
. /home/ec2-user/flask/venv/bin/activate

# 后台启动Flask,并重定向日志到文件
python /home/ec2-user/flask/hello.py > /home/ec2-user/flask/flask.log 2>&1 &

# 启动Prometheus,同样后台运行并记录日志
cd /home/ec2-user/prometheus/prometheus-2.39.1.linux-amd64/
sudo ./prometheus > /home/ec2-user/prometheus/prometheus.log 2>&1 &

# 可选:让脚本等待所有后台进程结束,避免脚本退出后进程被意外终止
wait
  • &:将进程转入后台运行,脚本无需等待该进程退出即可继续执行下一行
  • > /path/to/log.log 2>&1:将标准输出和错误输出合并写入日志文件,默认情况下后台进程的输出会关联到当前终端,关闭终端可能导致进程退出
  • wait:让脚本保持运行状态,直到所有后台启动的进程都结束,适合在终端手动启动脚本的场景

方案2:确保Flask启动后再启动Prometheus

如果需要保证Flask完全启动(端口监听正常)后再启动Prometheus,可以添加端口检查逻辑:

#!/bin/bash

. /home/ec2-user/flask/venv/bin/activate
python /home/ec2-user/flask/hello.py > /home/ec2-user/flask/flask.log 2>&1 &

# 等待Flask的5000端口(默认端口)监听成功
until nc -z localhost 5000; do
  sleep 1
done

cd /home/ec2-user/prometheus/prometheus-2.39.1.linux-amd64/
sudo ./prometheus > /home/ec2-user/prometheus/prometheus.log 2>&1 &

wait
  • nc -z localhost 5000:检查本地5000端口是否处于监听状态
  • until循环:每隔1秒检查一次,直到端口可用再执行后续的Prometheus启动命令

注意:如果你的Flask使用了非默认端口,需要把5000替换成实际端口。

内容的提问来源于stack exchange,提问作者cloud-engineer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:50:25