我想引用this question,因为我确信有人会将此标记为重复。
我不是在寻找对supervisord的另一个引用。我确信它很棒,但节点PM2具有我需要的功能,并且更容易实现和测试。
在原型制作过程中,我创建了一个名为“p3env'”的虚拟环境。在每个脚本的顶部,我放置一个bash指令:
#!./py3env/bin/python
这允许我使用这个特定的python环境执行目录中的每个脚本,而不必激活它。这是非常方便和有用的,当我手动启动时,python脚本运行良好。
当我说“手动启动”时,我应该清楚我的意思。我的脚本名为' strain_to_db.py'。当我手动启动它时,我通过ssh在shell上:
./strain_to_db.py
这使得我需要工作的一切工作。
为了让pm2工作,我开始:
pm2 start ./strain_to_db.py
显然pm2会忽略python脚本顶部的指令,并尝试使用全局' python'来执行。没问题,我可以指定解释器:
pm2 start ./strain_to_db.py --interpreter /home/ubuntu/db_if/p3env/bin/python
没有骰子。再次,也许尝试更多的绝对路径:
pm2 start /home/ubuntu/db_if/strain_to_db.py --interpreter /home/ubuntu/db_if/p3env/bin/python
现在我感到沮丧。我尝试了另一种策略。我尝试使用以下命令在命令行中运行python可执行文件:
/home/ubuntu/db_if/p3env/bin/python /home/ubuntu/db_if/strain_to_db.py
当pm2不参与时,此方法正常。当我尝试使用'命令行参数'将其传递给pm2时式:
pm2 start /home/ubuntu/db_if/p3env/bin/python -- /home/ubuntu/db_if/strain_to_db.py
同样的错误。该错误始终无法导入pymysql',它只安装在虚拟环境中。
我不知道还有什么可以用的。我有几个脚本要添加到pm2执行监视器,但我似乎无法让其中一个脚本启动并正确运行。
答案 0 :(得分:16)
再看一遍之后,电子邮件顶部的question that I referenced在其中一个答案中找到了线索,但不是答案。
当文件以'.py'结尾时,pm2会调用'python'......无论如何。我相信pm2中有一个配置文件可以修改以更改此行为。我只是从我的脚本中删除了“.py”并指定了解释器:
pm2 start ./strain_to_db --interpreter ./py3env/bin/python
完美无缺。当我使用pm2创建启动脚本时,我将使用绝对路径。感谢所有正在寻找的人,我希望这有助于将来的某个人。
答案 1 :(得分:2)
这篇中型文章为我解决了这个问题。
https://medium.com/@gokhang1327/deploying-flask-app-with-pm2-on-ubuntu-server-18-04-992dfd808079
在虚拟环境中运行python脚本的命令:
emit(..... room=usersid
-名称是可选的,即以pm2状态显示的进程名称
结果:
“新”是我的virtualenv环境的名称。