我使用python瓶web框架来创建一个服务管理器,所以我已经为服务重新/启动/停止在我使用时发生的连线事件创建了端点
os.system('service apache2 restart')
或
os.system('/etc/init.d/apache2 restart')
apache接管了我的瓶应用程序的端口,所以如果我运行的是lsof -i :8080 (8080是我的瓶应用程序端口),我看到了
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/端口具有以下内容
# 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中运行相同的命令,所有操作都按照预期进行。
运行的。
发布于 2015-02-10 21:12:34
这是因为在默认情况下,子进程继承其父进程的文件描述符。
因为您的web应用程序打开了这个端口,所以它会将os.system请求传输到正在运行的apache服务器。
您需要修改您的python代码来执行以下操作。
os.fork()shutdown。os.system()请求。较新版本的python引入了在所有文件描述符上添加FD_CLOEXEC属性的默认行为,以避免这种行为。您也可以使用fcntl模块在侦听套接字上进行同样的操作,但这可能会破坏应用程序的其他方面,因此您需要对此进行测试。
https://serverfault.com/questions/666559
复制相似问题