我想参考一下这个问题 https://stackoverflow.com/questions/32127834/how-to-run-run-python-script-like-pm2-for-nodejs因为我确信有人会将其标记为重复项。
我不是在寻找另一个参考主管 http://supervisord.org/。我确信它很棒,但节点 PM2 具有我需要的功能,并且更容易实现和测试。
手动启动
在原型设计过程中,我创建了一个名为“p3env”的虚拟环境。在每个脚本的顶部,我放置了一个 bash 指令:
#!./py3env/bin/python
这允许我使用这个特定的 python 环境执行目录中的每个脚本,而无需激活它。它非常方便和有用,并且当我手动启动它时,Python 脚本运行得很好。
当我说“手动启动”时,我应该清楚我的意思。我的脚本名为“strain_to_db.py”。当我手动启动它时,我通过 ssh 进入 shell:
./strain_to_db.py
这使得我需要的一切都正常工作。
PM2 启动
从相对路径转向绝对路径
为了让 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
挫折
同样的错误。错误总是‘can't import pymysql’,只安装在虚拟环境上。
我不知道还能去哪里。我有几个脚本想要添加到 pm2 执行监视器,但我似乎无法让其中之一正确启动和运行。