Python certbot在命令行中工作,但在运行django对脚本的调用时失败

Python certbot在命令行中工作,但在运行django对脚本的调用时失败,python,django,centos7,Python,Django,Centos7,所以我已经处理这个问题好几天了,已经用尽了我能想到的一切可能的事情 为了澄清起见,我正在跑步 机器:Centos 7 Web服务器:Django Python版本:3.6 我在/usr/local/bin/activate\u https\u hostedvoice有这个shell脚本 #/bin/bash echo“| sudo-S curl-i-XPOST”http:///records/""$1""/""$2""" 睡眠10 NGINX_CONFIG_FILE=/etc/NGINX/gui

所以我已经处理这个问题好几天了,已经用尽了我能想到的一切可能的事情

为了澄清起见,我正在跑步

机器:Centos 7

Web服务器:Django

Python版本:3.6

我在/usr/local/bin/activate\u https\u hostedvoice有这个shell脚本

#/bin/bash
echo“| sudo-S curl-i-XPOST”http:///records/""$1""/""$2"""
睡眠10
NGINX_CONFIG_FILE=/etc/NGINX/guiconf.d/guiserver.conf
sed-i“s/]/,“$1”]/g”/var/lib/guiserver/astgui2/db_pass.py
echo“| su-c”/sbin/service guiserver reload”根目录
echo”“>>${NGINX\u配置文件}
echo“server{”>${NGINX\u CONFIG\u FILE}
echo“服务器名称$1;”>${NGINX\u配置文件}
echo“客户端\u最大\u正文\u大小4G;”>${NGINX\u配置文件}
echo“include guiconf.d/server_params;”>>${NGINX_CONFIG_FILE}
echo“include guiconf.d/static_files;”>>${NGINX_CONFIG_FILE}
echo“include guiconf.d/web_path;”>>${NGINX_CONFIG_FILE}
echo“include guiconf.d/local_path;”>>${NGINX_CONFIG_FILE}
echo“include guiconf.d/ws_path;”>>${NGINX_CONFIG_FILE}
echo“}”>${NGINX\u配置文件}
echo“| su-c”systemctl reload nginx”根目录
echo“| su-c”systemctl stop iptables”根目录
echo“| su-c”certbot--nginx-d“$1”-agree-tos--email-n“root
echo“| su-c”systemctl reload nginx”根目录
echo“| su-c”systemctl start iptables”根目录
echo“| su-c”/sbin/service guiserver reload”根目录
echo“| su-c”echo“0*/12***certbot--nginx renew-n”>/var/spool/cron/root”root
echo“| su-c”rm-f/var/lib/guiserver/bin/https_-config”根目录
echo“| su-c”echo“$1”>>/var/lib/guiserver/bin/https_-config”root
这里发生的事情是,首先我发送一个curl请求,将a记录添加到名称服务器。 然后,我将为nginx添加适当的配置

然后我重新加载nginx并停止iptables,以便certbot可以到达服务器

当我在命令行
bash/usr/local/bin/activate\u https\u hostedvoice

脚本运行完美,A记录可以立即ping

但是当我像这样通过django运行脚本时

os.system('echo”“| su-c”bash/usr/local/bin/activate_https_hostedvoice'+domain+'+points_to+'>/tmp/http_activate_log“root”);
我可以看到A记录被添加到nameserver,nginx配置值也被添加,但是当涉及到certbot时,这就是我收到的输出

服务器报告了以下错误:
域:
类型:dns
详细信息:DNS问题:NXDOMAIN正在查找
-检查此域是否存在DNS记录
脚本退出后,我会尝试ping A记录,但在服务器上会有几分钟无法ping,但如果我在本地计算机或其他计算机上尝试ping,并ping该域,则该记录将无法ping

在命令行中,我已经背靠背运行了30多个测试,它们都成功了。这个问题只有在我从django调用脚本时才会出现,对我来说毫无意义

问题更新:

在进一步测试之后,如果我运行
curl-I-XPOST“http:///records//“

直接在命令行上,然后它不能立即ping,所以我将它放在脚本中并运行
bash/tmp/test

然后该域立即可以ping

所以我很自然地把原来的剧本改成了
bash/tmp/test”“$1”“$2”“

而不是
echo”“| sudo-S curl-i-XPOST”http:///records/“1美元”/“2美元”

但我仍然有一个问题,它不能立即ping


谢谢Joseph,我尝试了这一步并成功了。一次只排一行

sudo pip uninstall requests
sudo pip uninstall urllib3
sudo yum remove python-urllib3 -y
sudo yum remove python-requests -y
sudo yum install python-urllib3 -y
sudo yum install python-requests -y
sudo yum install certbot python2-certbot-nginx
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1

我建议对所有命令使用完整路径。在我的Mac电脑上,当使用
print(os.environ['PATH'])
os.system('/usr/bin/env>/tmp/env.txt')
时,我会得到不同的
$PATH
值。可能在
$PATH
中找不到至少on命令,并且您没有检查错误。使用可能是更好的选择。。。