我想引用this question,因为我确信有人会将此标记为重复项。
我不是在寻找另一个对supervisord的引用。我确信这一切都很好,但是node 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,这个方法就可以了。当我尝试使用'command line argument'样式将其传递给pm2时:
pm2 start /home/ubuntu/db_if/p3env/bin/python -- /home/ubuntu/db_if/strain_to_db.py
同样的错误。错误总是“无法导入pymysql”,它只安装在虚拟环境中。
我不知道这件事还能去哪里。我有几个脚本要添加到pm2执行监视器中,但似乎无法让其中一个脚本正确启动和运行。
再看一看,邮件顶部的question that I referenced在其中一个答案中找到了线索,但没有找到答案。
当文件以.py结尾时,pm2调用“python”。。。不管怎样。我相信pm2中有一个配置文件,您可以修改它来改变这种行为。我只是从脚本中删除了“.py”,并指定了解释器:
工作得很好。当我使用pm2创建启动脚本时,我将使用绝对路径。谢谢你的关注,我希望这对将来的人有帮助。
相关问题 更多 >
编程相关推荐