1.背景
Windows系统开发Python项目,通过docker在Windows系统中将Python打包为centos系统的可执行文件。
将可执行文件部署到麒麟V10环境中,systemctl的启动命令可以正常调用,但是rabbitmqctl的命令调用后,没有生效。
2.subprocess方式执行shell
import subprocess
def command():
result = subprocess.Popen("source /etc/profile; /usr/local/rabbitmq/sbin/rabbitmq-server -detached", shell=True, stdout=subprocess.PIPE)
logger.info("========shell执行结果 ========= {}".format(result.stdout.read()))
2.1 判断执行是否出错
在Python项目中通过输出语句,查看执行是否出错
输出结果为空,执行语句增加; echo ‘success’,明确该语句已执行
“source /etc/profile; /usr/local/rabbitmq/sbin/rabbitmq-server -detached; echo ‘success’”
经测试,success能够打印,但是rabbitmq未正常启动
3. os方式执行shell
import os
def rabbitmq_start():
command = "source /etc/profile; /usr/local/rabbitmq/sbin/rabbitmq-server -detached; echo 'success'"
values = os.popen(command).read()
logger.info("========rabbitmq 启动========= {}".format(values))
经测试,success能够打印,但是rabbitmq未正常启动
4. 通过Python3执行Python脚本
import subprocess
import logging
command="export CONTROL=/usr/local/rabbitmq/sbin/rabbitmqctl; export HOME=/usr/local/rabbitmq/ ;export ERL_HOME=/usr/local/erlang; /usr/local/rabbitmq/sbin/rabbitmq-server -detached"
subprocess.Popen(command, shell=True, stdout=subprocess.DEVNULL, close_fds=True)
经测试,rabbitmq正常启动
5.在麒麟V10系统中安装Python可执行环境
将未编译的Python项目部署到系统中
经测试,rabbitmq正常启动
6.在麒麟V10系统中通过pyinstaller将Python项目打包为可执行文件
执行可执行文件
经测试,rabbitmq正常启动
结论
此次问题推测为centos内核与麒麟V10内核不一致导致。