您为什么要手动启动/停止它?似乎使用 init 脚本会有所帮助。您可以在 httpd.conf 文件中指定运行 httpd 进程的用户名,也可以指定环境设置。对于 RedHat/CentO,这看起来像:
将环境设置添加到文件 /etc/sysconfig/httpd 中(或者,您可以设置一个命令从另一个文件中读取这些环境变量,并在必要时在您的 .bashrc 中设置相同的命令 -- 所以只有一个文件包含您需要的环境设置)。
修改 /etc/httpd/conf/httpd.conf 文件,使运行 httpd 进程的用户为非 root 用户(在 RedHat/CentOs 中默认为 apache)。
完成后,使用 /etc/init.d/httpd 启动和停止进程,您应该处于良好状态。
针对发帖人的评论进行了更新:
你不想从你的 bashrc 中读取...并使用 /usr/init.d/httpd 重启(它就像 apache2ctl 一样简单)... 至于如何做到这一点,请将环境变量放入一个新文件。在下面的示例中,我假设您正在使用文件“/etc/httpd/envconfig”。然后将这些行添加到您的 bashrc 和 /etc/sysconfig/httpd:
如果 [ -f /etc/httpd/envconfig ];然后
. /etc/httpd/envconfig
菲
现在,您的 bash 和 httpd 脚本都应该可以使用更新的环境变量。
另一个注意事项是 CGI 环境变量在 Apache 中的处理方式不同,您可能需要查看此 URL:
http://httpd.apache.org/docs/2.2/env.html
特别是,“...变量也可以从使用 PassEnv 指令启动服务器的 shell 环境中传递...”
我相信您需要在 httpd.conf 文件中放置适当的“PassEnv”指令,指定您希望传递给 CGI 脚本的环境变量的名称。好消息是您不必指定值,因此只要您不更改变量本身的名称,您就不必管理两个配置。