首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python重新启动apache会导致端口更改。

使用python重新启动apache会导致端口更改。
EN

Server Fault用户
提问于 2015-02-10 19:04:42
回答 1查看 145关注 0票数 0

我使用python瓶web框架来创建一个服务管理器,所以我已经为服务重新/启动/停止在我使用时发生的连线事件创建了端点

os.system('service apache2 restart')

os.system('/etc/init.d/apache2 restart')

apache接管了我的瓶应用程序的端口,所以如果我运行的是lsof -i :8080 (8080是我的瓶应用程序端口),我看到了

代码语言:javascript
复制
COMMAND   PID     USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
python  27396     root    3u  IPv4 1298282      0t0  TCP *:http-alt (LISTEN)
apache2 27426     root    3u  IPv4 1298282      0t0  TCP *:http-alt (LISTEN)
apache2 27428 www-data    3u  IPv4 1298282      0t0  TCP *:http-alt (LISTEN)
apache2 27429 www-data    3u  IPv4 1298282      0t0  TCP *:http-alt (LISTEN)
apache2 27430 www-data    3u  IPv4 1298282      0t0  TCP *:http-alt (LISTEN)
apache2 27432 www-data    3u  IPv4 1298282      0t0  TCP *:http-alt (LISTEN)
apache2 27433 www-data    3u  IPv4 1298282      0t0  TCP *:http-alt (LISTEN)
apache2 27435 www-data    3u  IPv4 1298282      0t0  TCP *:http-alt (LISTEN)

文件/etc/apache2 2/端口具有以下内容

代码语言:javascript
复制
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 80

<IfModule ssl_module>
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

当然,如果我在shell中运行相同的命令,所有操作都按照预期进行。

注意: python脚本是作为根

运行的。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2015-02-10 21:12:34

这是因为在默认情况下,子进程继承其父进程的文件描述符。

因为您的web应用程序打开了这个端口,所以它会将os.system请求传输到正在运行的apache服务器。

您需要修改您的python代码来执行以下操作。

  • 调用os.fork()
  • 关闭web应用程序使用的侦听服务器端口的文件描述符。(注意不要在上面调用shutdown
  • 调用您的os.system()请求。
  • 退出您的分叉过程。

较新版本的python引入了在所有文件描述符上添加FD_CLOEXEC属性的默认行为,以避免这种行为。您也可以使用fcntl模块在侦听套接字上进行同样的操作,但这可能会破坏应用程序的其他方面,因此您需要对此进行测试。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/666559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档