【发布时间】:2021-04-20 19:51:26
【问题描述】:
我有一个具有以下结构的 Python 3 应用程序:
application
|
- application.json
|
- package
| |
| - __init__.py
| - module1.py
| - module2.py
|
- test_package
| |
| - __init__.py
| - test_module1.py
| - test_module2.py
|
- conf
| |
| - package.conf
|
- log
| |
| - module1.log
| - module2.log
|
- virtualenv (Python 3 virtual environment)
|
- bin
| |
| - python
| - activate
| - ...
|
- ...
它需要从application目录启动如下(假设你的工作目录是/path/to/application/):
/path/to/application/virtualenv/bin/python -m package.module1
或
virtualenv/bin/python -m package.module1
这个应用程序在服务器上运行一个后端服务,我想用 PM2 来管理它,因为我已经用它来管理服务器中一个基于 Node.js 的网站。
我尝试使用以下环境文件 (application.json) 没有成功,我无法弄清楚它有什么问题:
{
"name": "application",
"script": "/path/to/application/virtualenv/bin/python",
"args": "-u -m package.module1",
"cwd": "/path/to/application/",
"instances": 1,
"autorestart": true,
"watch": true,
"max_memory_restart": "1G",
"pid": "/path/to/application/log/application.pid",
"out_file": "/path/to/application/log/application_out_file.log",
"error_file": "/path/to/application/log/application_error_file.log"
}
当我运行pm2 start application.json 时,应用程序启动,在其内部循环的一次迭代后崩溃,然后在完成内部循环的一次迭代之前它开始重新启动并一遍又一遍地崩溃。然后,我运行pm2 stop application 命令,应用程序开始运行,它应该是¯_(ツ)_/¯。再次运行pm2 stop application 命令确实会停止应用程序,delete 也可以工作。
我还尝试使用 PM2 文档中所述的 interpreter 和 interpreter-args,但我已经在脚本中调用了解释器,所以这不起作用。
我应该如何调用我的脚本,以免出现这种奇怪的行为?调用需要使用python -m package.module 调用的python 脚本的推荐方法是什么?
编辑
使用application 目录中的以下命令似乎有效:
pm2 start '/path/to/application/virtualenv/bin/python -u -m package.module1'
如何将其转换为 PM2 的配置文件?
【问题讨论】:
标签: python python-3.x pm2