我们已经成功地使用pm2在服务器上运行应用程序。我们目前正在迁移到docker,我们看到了 http://pm2.keymetrics.io/docs/usage/docker-pm2-nodejs/
但是,将两者一起使用的意义何在?码头工人不提供pm2所做的一切吗?
我想引用这个问题,因为我确信有人会将此标记为重复.
我不是在寻找另一个对supervisord的引用.我确信它很棒,但节点PM2具有我需要的功能,并且更容易实现和测试.
在原型设计过程中,我创建了一个名为"p3env"的虚拟环境.在每个脚本的顶部,我放置一个bash指令:
#!./py3env/bin/python
Run Code Online (Sandbox Code Playgroud)
这允许我使用这个特定的python环境执行目录中的每个脚本,而不必激活它.这是非常方便和有用的,当我手动启动时,python脚本运行良好.
当我说"手工启动"时,我应该清楚我的意思.我的脚本叫做'strain_to_db.py'.当我手动启动时,我通过ssh在shell上:
./strain_to_db.py
Run Code Online (Sandbox Code Playgroud)
这使得我需要工作的一切工作.
为了让pm2工作,我开始:
pm2 start ./strain_to_db.py
Run Code Online (Sandbox Code Playgroud)
显然pm2忽略了python脚本顶部的指令,并尝试使用全局'python'执行.没问题,我可以指定解释器:
pm2 start ./strain_to_db.py --interpreter /home/ubuntu/db_if/p3env/bin/python
Run Code Online (Sandbox Code Playgroud)
没有骰子.再次,也许尝试更多的绝对路径:
pm2 start /home/ubuntu/db_if/strain_to_db.py --interpreter /home/ubuntu/db_if/p3env/bin/python
Run Code Online (Sandbox Code Playgroud)
现在我感到很沮丧.我尝试了另一种策略.我尝试使用以下命令在命令行中运行python可执行文件:
/home/ubuntu/db_if/p3env/bin/python /home/ubuntu/db_if/strain_to_db.py
Run Code Online (Sandbox Code Playgroud)
当没有涉及pm2时,这很好用.当我尝试使用'命令行参数'样式将其传递给pm2时:
pm2 start /home/ubuntu/db_if/p3env/bin/python -- /home/ubuntu/db_if/strain_to_db.py
Run Code Online (Sandbox Code Playgroud)
同样的错误.错误总是'无法导入pymysql',它只安装在虚拟环境中.
我不知道还有什么可以用的.我有几个脚本要添加到pm2执行监视器,但我似乎无法让其中一个启动并正确运行.