关于 supervisor 运行.sh 脚本的问题

2018-01-02 14:33:28 +08:00
 piaochen0

目的: 用 python 写了一个监控文件夹的程序,需要长时间运行监控。运行 py 文件之前,需要切换目录和进入虚拟环境。

方案:
我写了一个 sh 脚本,supervisor 来运行此 sh 脚本。

.sh 代码:
cd /var/ftp_root/program/watch
. /root/.virtualenvs/watch/bin/activate
python3 startall.py

问题:
在 sh 脚本中,python3 startall.py 这句起了另外一个进程 python3,这个也是长时间需要运行的。我在 superviosr 关闭.sh 脚本后,该 python3 进程还是在运行。要是使用 supervisor 重启该任务,实际上就会同事存在两个 python3 进程。如何在 supervior 关闭任务的时候,把启动的相关进程也关了?或者像我这样的,有什么其他好的解决方案?

6164 次点击
所在节点    Linux
8 条回复
fordoo
2018-01-02 15:34:16 +08:00
directory=/var/ftp_root/program/watch
command=. /root/.virtualenvs/watch/bin/python3 startall.py

我猜的
fordoo
2018-01-02 15:35:12 +08:00
command=/root/.virtualenvs/watch/bin/python3 startall.py 这样
wzha2008
2018-01-02 15:37:34 +08:00
mutilprocess.setDaemon(False)
bingxx
2018-01-02 15:57:58 +08:00
配置增加以下, 试试:

stopasgroup=true
killasgroup=true
SErHo
2018-01-02 16:22:12 +08:00
改成 exec python3 startall.py 试试?
hsuan
2018-01-02 16:29:16 +08:00
supervisors 不能直接运行 Python 吗,还要用 sh 封装一道?切换目录完全可以放到 python 里去做
knightdf
2018-01-02 17:47:55 +08:00
不需要,直接用虚拟环境的 python 执行就行了
tempdban
2018-01-02 17:52:30 +08:00
兄弟。。。你注意过有个叫 pyenv 的环境变量么?
virtualenv 的 active 脚本其实就是设了两个环境变量:
PATH 和 pyenv
写到 supervisor 的配置文件里就好

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/419380

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX