在线支付系统线程守护新版
在线支付系统线程守护新版
要了解自己的情况:
[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 服务单元文件
-
打开终端。
-
创建一个新的 Systemd 服务单元文件。通常,这些文件存储在
/etc/systemd/system/
目录下。你可以使用nano
或其他文本编辑器来创建文件:
sudo nano /etc/systemd/system/app.service
bash
sudo nano /etc/systemd/system/flask_app.service
- 在打开的编辑器中,粘贴以下内容,并根据你的实际情况进行修改:
```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: 启用并启动服务
- 重载 Systemd 管理器配置,以识别新的服务文件:
bash
sudo systemctl daemon-reload
- 启用服务,以便在系统启动时自动运行:
bash
sudo systemctl enable flask_app.service
- 启动服务:
bash
sudo systemctl start flask_app.service
- 确保运行服务的用户(在本例中为
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 服务文件中设置该环境变量:
- 修改
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)
- 在 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管理的服务的启动、停止和重启。
评论区 (0)
请 登录 后发表评论
暂无评论,来发表第一条评论吧!