Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用pm2管理python应用程序_Python_Python 3.x_Pm2 - Fatal编程技术网

使用pm2管理python应用程序

使用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 |

我有一个具有以下结构的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
    | - ...
    |
    - ...
它需要按如下方式从
应用程序
目录启动(在本例中,假设您的工作目录为
/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'