未分类

在线支付系统线程守护新版

在线支付系统线程守护新版

要了解自己的情况:

[root@VM-8-5-centos flask+mysql的博客网站]# which conda
/root/miniconda3/condabin/conda
[root@VM-8-5-centos flask+mysql的博客网站]#

启动

在CentOS中,要让Conda环境在开机时自动启动并运行/root/websites/flask+mysql的博客网站/app.py,你可以创建一个systemd服务单元(service unit)来实现这一目标。以下是步骤:

1. 创建一个systemd服务文件

首先,创建一个systemd服务文件,例如flask_blog.service,放在/etc/systemd/system/目录下。

sudo nano /etc/systemd/system/flask_blog.service

在文件中添加以下内容:

[Unit]
Description=Flask Blog Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root/websites/flask+mysql的博客网站
Environment="PATH=/root/miniconda3/bin:/usr/local/bin:/usr/bin:/bin"
ExecStart=/root/miniconda3/bin/conda run --no-capture-output -n your_env_name python app.py
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target

请确保替换以下内容:

  • your_env_name:你的Conda环境名称。
  • WorkingDirectory:你的Flask应用所在的目录。
  • ExecStart:启动Flask应用的命令,确保使用正确的Conda环境和Python路径。

[Unit]
Description=Flask Blog Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root/websites/flask+mysql的博客网站
Environment="PATH=/root/miniconda3/bin:/usr/local/bin:/usr/bin:/bin"
ExecStart=/root/miniconda3/bin/conda run --no-capture-output -n blogenv python app.py
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target

2. 重新加载systemd管理器配置

sudo systemctl daemon-reload

3. 启用服务

sudo systemctl enable flask_blog.service

4. 启动服务

sudo systemctl start flask_blog.service


sudo systemctl start flask_blog.service

5. 检查服务状态

sudo systemctl status flask_blog.service

如果一切正常,你的Flask应用应该在系统启动时自动运行。

注意事项:

  • 运行服务作为root用户可能会有安全风险,建议使用普通用户或通过虚拟环境运行。
  • 确保Conda环境已经创建,并且所有依赖都已安装。
  • 如果你的Flask应用需要监听公共接口,确保在防火墙中开放相应的端口。
  • 定期检查日志文件以监控服务的状态和潜在的问题。
    通过这些步骤,你应该能够设置Conda环境在CentOS开机时自动启动Flask应用。如果遇到任何问题,请提供具体的错误信息或日志输出,以便进一步帮助。

要取消在CentOS中自动启动的systemd服务,你可以使用systemctl命令来禁用该服务。以下是具体的步骤:

禁用

1. 禁用服务

使用以下命令来禁用之前创建的flaskblog.service服务:

sudo systemctl stop flask_blog.service

这条命令会阻止服务在系统启动时自动运行。

2. 停止服务(如果正在运行)

如果服务当前正在运行,并且你想要立即停止它,可以使用以下命令:

sudo systemctl stop flask_blog.service

3. 检查服务状态

你可以检查服务状态来确认它已经被禁用并且停止:

sudo systemctl status flask_blog.service

如果服务已经被禁用,状态信息通常会显示“disabled”并且服务不会运行。

4. (可选)删除服务文件

如果你确定不再需要这个服务,并且想要从系统中完全移除服务文件,可以删除/etc/systemd/system/目录下的flaskblog.service文件:

sudo rm /etc/systemd/system/flask_blog.service

5. 重新加载systemd管理器配置

在删除服务文件后,重新加载systemd管理器配置以更新系统:

sudo systemctl daemon-reload

通过这些步骤,你应该能够成功取消CentOS中自动启动的Conda环境下的Flask应用。如果你在执行这些操作时遇到任何问题,请提供具体的错误信息或日志输出,以便进一步帮助。

工作路径:
/root/websites/支付系统/app.py

为了创建一个开机自启动的守护进程来运行你的 Flask 应用,你可以使用 Systemd,它是大多数现代 Linux 发行版的默认初始化系统。以下是创建 Systemd 服务单元文件的步骤,该文件将在系统启动时自动启动你的 Flask 应用。

步骤 1: 创建 Systemd 服务单元文件

  1. 打开终端。

  2. 创建一个新的 Systemd 服务单元文件。通常,这些文件存储在 /etc/systemd/system/ 目录下。你可以使用 nano 或其他文本编辑器来创建文件:

sudo nano /etc/systemd/system/app.service

bash sudo nano /etc/systemd/system/flask_app.service

  1. 在打开的编辑器中,粘贴以下内容,并根据你的实际情况进行修改:

```ini
[Unit]
Description=Shopping_Pay App
After=network.target

[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/root/websites/支付系统
Environment="PATH=/root/miniconda3/envs/blogenv/bin"
ExecStart=/root/miniconda3/envs/blogenv/bin/python app.py
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

```

  • Description:服务的描述。
  • After:定义服务应该在网络启动后启动。
  • Type:服务类型,simple 表示执行 ExecStart 指定的命令。
  • User:运行服务的用户,根据你的需求更改。
  • WorkingDirectory:你的 Flask 应用所在的目录。
  • Environment:设置环境变量,确保使用正确的 Python 环境。
  • ExecStart:启动服务的命令,确保使用正确的 Python 解释器和应用入口文件。
  • Restart:定义在服务失败时是否重启。
  • RestartSec:失败后重启前等待的时间。

步骤 2: 启用并启动服务

  1. 重载 Systemd 管理器配置,以识别新的服务文件:

bash sudo systemctl daemon-reload

  1. 启用服务,以便在系统启动时自动运行:

bash sudo systemctl enable flask_app.service

  1. 启动服务:

bash sudo systemctl start flask_app.service

  1. 确保运行服务的用户(在本例中为flaskuser)有权限访问/root/websites/支付系统/目录和执行app.py脚本。你可以通过以下命令调整权限:
sudo chown -R root:root /root/websites/支付系统/
sudo chmod +x /root/websites/支付系统/app.py

检查服务状态,确保它正在运行:

sudo systemctl status flask_app.service

我的实战

cd /root/websites
(base) [root@VM-8-5-centos ~]# cd /root/websites
(base) [root@VM-8-5-centos websites]# sudo nano /etc/systemd/system/flask_app.service
(base) [root@VM-8-5-centos websites]# source /etc/systemd/system/flask_app.service
-bash: /etc/systemd/system/flask_app.service: No such file or directory
(base) [root@VM-8-5-centos websites]# sudo systemctl daemon-reload
(base) [root@VM-8-5-centos websites]# sudo systemctl enable flask_app.service
Failed to execute operation: No such file or directory
(base) [root@VM-8-5-centos websites]# sudo nano /etc/systemd/system/flask_app.service
(base) [root@VM-8-5-centos websites]# sudo nano /etc/systemd/system/flask_app.service
(base) [root@VM-8-5-centos websites]# sudo systemctl daemon-reload
(base) [root@VM-8-5-centos websites]# sudo systemctl enable flask_app.service
Created symlink from /etc/systemd/system/multi-user.target.wants/flask_app.service to /etc/systemd/system/flask_app.service.
(base) [root@VM-8-5-centos websites]# sudo systemctl start flask_app.service
(base) [root@VM-8-5-centos websites]# sudo systemctl status flask_app.service
● flask_app.service - Shopping_Pay App
   Loaded: loaded (/etc/systemd/system/flask_app.service; enabled; vendor preset: disabled)
   Active: activating (auto-restart) (Result: exit-code) since Tue 2025-03-25 15:47:56 CST; 4s ago
  Process: 28164 ExecStart=/root/miniconda3/envs/blogenv/bin/python app.py (code=exited, status=217/USER)
 Main PID: 28164 (code=exited, status=217/USER)

Mar 25 15:47:56 VM-8-5-centos systemd[1]: Unit flask_app.service entered failed state.
Mar 25 15:47:56 VM-8-5-centos systemd[1]: flask_app.service failed.
Mar 25 15:48:01 VM-8-5-centos systemd[1]: flask_app.service holdoff time over, sche...t.
Mar 25 15:48:01 VM-8-5-centos systemd[1]: Stopped Shopping_Pay App.
Mar 25 15:48:01 VM-8-5-centos systemd[1]: Started Shopping_Pay App.
Mar 25 15:48:01 VM-8-5-centos systemd[1]: flask_app.service: main process exited, c...ER
Mar 25 15:48:01 VM-8-5-centos systemd[1]: Unit flask_app.service entered failed state.
Mar 25 15:48:01 VM-8-5-centos systemd[1]: flask_app.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
(base) [root@VM-8-5-centos websites]# sudo chown -R flaskuser:flaskuser /root/websites/ 支付系统/
chown: invalid user: ‘flaskuser:flaskuser’
(base) [root@VM-8-5-centos websites]# sudo chmod +x /root/websites/支付系统/app.py
(base) [root@VM-8-5-centos websites]# sudo chown -R flaskuser:flaskuser /root/websites/ 支付系统/
chown: invalid user: ‘flaskuser:flaskuser’
(base) [root@VM-8-5-centos websites]# sudo chown -R root:root /root/websites/支付系统/
(base) [root@VM-8-5-centos websites]# sudo systemctl status flask_app.service
● flask_app.service - Shopping_Pay App
   Loaded: loaded (/etc/systemd/system/flask_app.service; enabled; vendor preset: disabled)
   Active: activating (auto-restart) (Result: exit-code) since Tue 2025-03-25 15:52:39 CST; 787ms ago
  Process: 30369 ExecStart=/root/miniconda3/envs/blogenv/bin/python app.py (code=exited, status=217/USER)
 Main PID: 30369 (code=exited, status=217/USER)

Mar 25 15:52:39 VM-8-5-centos systemd[1]: Unit flask_app.service entered failed state.
Mar 25 15:52:39 VM-8-5-centos systemd[1]: flask_app.service failed.
(base) [root@VM-8-5-centos websites]# sudo nano /etc/systemd/system/flask_app.service
(base) [root@VM-8-5-centos websites]# sudo nano /etc/systemd/system/flask_app.service
(base) [root@VM-8-5-centos websites]# sudo systemctl daemon-reload
(base) [root@VM-8-5-centos websites]# sudo chmod +x /root/websites/支付系统/app.py
(base) [root@VM-8-5-centos websites]# sudo systemctl enable flask_app.service
(base) [root@VM-8-5-centos websites]# sudo systemctl start flask_app.service
(base) [root@VM-8-5-centos websites]# sudo systemctl status flask_app.service
● flask_app.service - Shopping_Pay App
   Loaded: loaded (/etc/systemd/system/flask_app.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2025-03-25 15:55:14 CST; 1min 9s ago
 Main PID: 31601 (python)
   CGroup: /system.slice/flask_app.service
           ├─31601 /root/miniconda3/envs/blogenv/bin/python app.py
           └─31602 /root/miniconda3/envs/blogenv/bin/python /root/websites/ /app.py

Mar 25 15:55:14 VM-8-5-centos python[31601]: * Serving Flask app 'app'
Mar 25 15:55:14 VM-8-5-centos python[31601]: * Debug mode: on
Mar 25 15:55:14 VM-8-5-centos python[31601]: WARNING: This is a development server....d.
Mar 25 15:55:14 VM-8-5-centos python[31601]: * Running on all addresses (0.0.0.0)
Mar 25 15:55:14 VM-8-5-centos python[31601]: * Running on http://127.0.0.1:5001
Mar 25 15:55:14 VM-8-5-centos python[31601]: * Running on http://10.2.8.5:5001
Mar 25 15:55:14 VM-8-5-centos python[31601]: Press CTRL+C to quit
Mar 25 15:55:14 VM-8-5-centos python[31601]: * Restarting with stat
Mar 25 15:55:15 VM-8-5-centos python[31601]: * Debugger is active!
Mar 25 15:55:15 VM-8-5-centos python[31601]: * Debugger PIN: 714-975-813
Hint: Some lines were ellipsized, use -l to show in full.
(base) [root@VM-8-5-centos websites]# 

骤 3: 解决端口冲突问题

如果你的 Flask 应用在启动时遇到端口冲突,你可以修改 app.py 以使用环境变量来设置端口,然后在 Systemd 服务文件中设置该环境变量:

  1. 修改 app.py,使用环境变量来设置端口:

python from flask import Flask app = Flask(__name__) port = int(os.environ.get('FLASK_PORT', 5000)) @app.route('/') def hello(): return 'Hello, World!' if __name__ == '__main__': app.run(host='0.0.0.0', port=port)

  1. 在 Systemd 服务文件中设置 FLASK_PORT 环境变量:

ini [Service] ... Environment="PATH=/home/root/blogenv/bin FLASK_PORT=5001" ...

这样,你的 Flask 应用就会在系统启动时自动运行,并且如果遇到错误会自动重启。确保你的服务文件中的路径、用户和环境变量与你的系统配置相匹配。

步骤 4:怎么停止服务呢

要停止由Systemd管理的服务,你可以使用以下命令:

sudo systemctl stop flask_app.service

这个命令会停止flask_app.service服务。如果你还想在下次系统启动时不再自动启动这个服务,你可以使用以下命令来禁用服务:

sudo systemctl disable flask_app.service

如果你想再次启用服务以使其在系统启动时自动运行,可以使用:

sudo systemctl enable flask_app.service

检查服务状态

停止服务后,你可以使用以下命令检查服务状态,确认它已经停止:

sudo systemctl status flask_app.service

重启服务

如果你之后想要重启服务,可以使用:

sudo systemctl restart flask_app.service

注意

请确保在执行这些命令时具有相应的权限,通常需要root权限或使用sudo
通过这些命令,你可以轻松地管理由Systemd管理的服务的启动、停止和重启。