很多python这样的 flask app,在服务器端激活,长期运行。可通过以下步骤实现:
1. 配置 systemd
服务文件
首先,为每个 Flask 应用配置 systemd
服务文件,如之前提到的。假设你有多个 Flask 应用,每个应用的服务文件如下:
/etc/systemd/system/appA.service
/etc/systemd/system/appB.service
/etc/systemd/system/appC.service
每个服务文件的内容类似于以下示例(注意修改为适合你的应用的内容):
[Unit]
Description=Flask App A
After=network.target
[Service]
User=root
Group=root
WorkingDirectory=/path/to/your/appA
ExecStart=python3 /path/to/your/appA/app.py
Restart=always
[Install]
WantedBy=multi-user.target
2. 创建管理脚本
接下来,创建一个 Bash 脚本来管理这些服务。这个脚本可以用来启动、停止或重启所有 Flask 应用服务。
创建脚本文件
在你的主目录或 /usr/local/bin/
中创建一个脚本文件,如 manage_flask_services.sh
:
#!/bin/bash
SERVICES=("appA" "appB" "appC") # 服务名称数组
start_services() {
for SERVICE in "${SERVICES[@]}"; do
echo "Starting $SERVICE.service..."
sudo systemctl start $SERVICE.service
done
}
stop_services() {
for SERVICE in "${SERVICES[@]}"; do
echo "Stopping $SERVICE.service..."
sudo systemctl stop $SERVICE.service
done
}
restart_services() {
for SERVICE in "${SERVICES[@]}"; do
echo "Restarting $SERVICE.service..."
sudo systemctl restart $SERVICE.service
done
}
status_services() {
for SERVICE in "${SERVICES[@]}"; do
sudo systemctl status $SERVICE.service
done
}
case "$1" in
start)
start_services
;;
stop)
stop_services
;;
restart)
restart_services
;;
status)
status_services
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
保存并赋予执行权限
保存该脚本文件后,给它赋予执行权限:
chmod +x manage_flask_services.sh
3. 使用脚本管理服务
现在,你可以通过这个脚本来管理所有的 Flask 服务:
-
启动所有服务:
./manage_flask_services.sh start
停止所有服务:
./manage_flask_services.sh stop
重启所有服务:
./manage_flask_services.sh restart
查看所有服务状态:
./manage_flask_services.sh status
4. 崩溃自动重启
在每个
systemd
服务文件中,我们已经配置了Restart=always
,这意味着如果服务崩溃,systemd
会自动重启该服务。5. 自动启动
如果你希望这些服务在系统启动时自动启动,可以使用以下命令启用每个服务:
sudo systemctl enable appA.service
sudo systemctl enable appB.service
sudo systemctl enable appC.service