好的,在全新的 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 restart
或service apache2 restart
。这两者确实都会停止和启动,并对可能的错误进行一些处理。
答案3
您是否绝对肯定其他 Apache 配置文件中没有隐藏其他User
或Group
指令?请记住,最后遇到的那个“获胜”。
答案4
好的,下面的内容可以在我的 bash 脚本中满足我的需要:
sudo apachectl stop
sleep 5
sudo apachectl start
它并不完美,因为我更希望它基于“停止”是否真正完成(而不是仅仅暂停 5 秒),但由于这是一个用于设置新服务器环境的引导脚本,因此它应该非常可靠。如果有人有更好的答案,请随时给出。(但要具体。)