使用pm2管理python应用程序
我有一个具有以下结构的Python 3应用程序:使用pm2管理python应用程序,python,python-3.x,pm2,Python,Python 3.x,Pm2,我有一个具有以下结构的Python 3应用程序: application | - application.json | - package | | | - __init__.py | - module1.py | - module2.py | - test_package | | | - __init__.py | - test_module1.py | - test_module2.py | - conf |
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
| - ...
|
- ...
它需要按如下方式从应用程序
目录启动(在本例中,假设您的工作目录为/path/to/application/
):
或
这个应用程序在服务器上运行后端服务,我想用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文档中所述的解释器
和解释器args
,但我已经在脚本中调用了解释器,因此无法使用
我应该如何调用我的脚本以避免出现这种奇怪的行为?建议如何调用需要使用python-m package.module
调用的python脚本
编辑
使用应用程序
目录中的以下命令似乎有效:
pm2 start '/path/to/application/virtualenv/bin/python -u -m package.module1'
如何将其转换为PM2的配置文件?我发现了问题所在。环境文件(
application.json
)将watch
字段设置为true
。此设置监视应用程序文件夹或子文件夹中是否有任何文件更改(例如,应用程序
文件夹和子文件夹)
<> >日志包含在文件夹<代码>应用程序/log /<代码>中,它是<代码>应用程序< /代码>的子文件夹。一旦任何东西被写入日志,PM2就检测到它,并重新加载应用程序。禁用此设置会修复所有问题。 < P>我只想添加考虑设置选项——忽略监视。例如,您可以添加到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 '/path/to/application/virtualenv/bin/python -u -m package.module1'