Apache:apachectl restart 不会重新加载环境变量

Apache:apachectl restart 不会重新加载环境变量

好的,在全新的 ubuntu 12.04 上,我通过以下方式安装 lamp 堆栈:sudo taskel install lamp-server

接下来我想做的是更改 Apache 运行的用户和组,然后重新启动。应该很容易,对吧?错了。

Apache 安装后会从 /etc/apache2/envvars 获取用户和组。我编辑此文件并更改用户和组,然后执行“apachectl restart”,结果……不行,旧的用户和组仍在使用中(通过 phpinfo 确认)。但如果我先执行“apachectl stop”,然后执行“apachectl start”,那么它就可以正常工作。但是,这很糟糕,因为我正在尝试为 Vagrant 编写 bootstrap.sh 脚本,这两种方法在该上下文中都不起作用(我猜停止/启动发生得太快了,所以虽然“停止”有效,但“启动”无​​效。

在理想情况下,“重新启动”将完成其工作并实际从环境变量重新加载新值。有什么想法吗?

答案1

在理想世界中,人们会阅读文档:-)

http://httpd.apache.org/docs/2.2/stopping.html#hup

信号:HUP

apachectl -k 重新启动

向父进程发送 HUP 或重启信号会导致其像在 TERM 中一样终止其子进程,但父进程不会退出。它会重新读取其配置文件,并重新打开所有日志文件。然后它会生成一组新的子进程并继续提供命中服务。

由于父级未重新启动,因此您无法使用重新启动来更改其运行的用户。

答案2

您可以使用/etc/init.d/apache2 restartservice apache2 restart。这两者确实都会停止和启动,并对可能的错误进行一些处理。

答案3

您是否绝对肯定其他 Apache 配置文件中没有隐藏其他UserGroup指令?请记住,最后遇到的那个“获胜”。

答案4

好的,下面的内容可以在我的 bash 脚本中满足我的需要:

sudo apachectl stop
sleep 5
sudo apachectl start

它并不完美,因为我更希望它基于“停止”是否真正完成(而不是仅仅暂停 5 秒),但由于这是一个用于设置新服务器环境的引导脚本,因此它应该非常可靠。如果有人有更好的答案,请随时给出。(但要具体。)

相关内容