作者:okkkokkokkkokka | 来源:互联网 | 2023-07-04 14:18
#!binbashexportLD_LIBRARY_PATHrootFRI_FACEIDinstantclient_12_1exportORACLE_HOMErootFRI_FAC
#!/bin/bash
export LD_LIBRARY_PATH=/root/FRI_FACEID/instantclient_12_1
export ORACLE_HOME=/root/FRI_FACEID/instantclient_12_1
source ../env/bin/activate
python -u ./new_whitelist_mb.py
问题
都是通过最后一个进程启动的,但是这个进程结束后,他所运行的python脚本创建的进程并没有结束,supervisor管理的他会帮你启动脚本并管理这个程序,supervisorctl start 启动这个程序的时候会创建一个进程并记录下这个进程的PID,当执行supervisorctl stop 然后再kill 了这个PID号的进程,但是,由这个脚本所创建的子进程并没办法管理,所以才出现了如上图的情况。
解决
#!/bin/bash
export LD_LIBRARY_PATH=/root/FRI_FACEID/instantclient_12_1
export ORACLE_HOME=/root/FRI_FACEID/instantclient_12_1
source ../env/bin/activate
exec python -u ./new_whitelist_mb.py
Linux系统exec函数可以把当前进程替换为一个新进程,且新进程与原进程有相同的PID。
这样supervisor在管理stop程序的时候就能够通过之前记录的PID来kill掉现在的进程。
Note: 在脚本中使用exec,exec会替换掉原进程,而且执行完会退出,不会执行下面的,类似于python的retrun,所以使用的时候下面不要再写内容。