Apache httpd不会加载.bashrc

时间:2012-03-22 02:33:41

标签: python bash cgi apache

我在Apache 2.2下运行Python脚本作为CGI。这些脚本依赖于我的.bashrc中设置的环境变量来正常运行。永远不会加载.bashrc,我的脚本会失败。

我不想通过使用一堆SETENV命令复制我的bashrc;配置文件很容易失去同步并导致难以发现的错误。

我正在运行apache作为我的用户,而不是root用户。我手动启动/停止它,所以/etc/init.d脚本根本不重要(我认为)。

鉴于这些限制,在调用CGI时,如何加载.bashrc?

编辑:我使用/ usr / sbin / apache2ctl来重新启动。

2 个答案:

答案 0 :(得分:0)

什么?当然,您并不是说您的脚本依赖于某个帐户的个人主目录中的配置。

Apache配置文件可以将环境变量导出到CGI脚本等。

也许你的程序太依赖于太多的环境变量。如何支持配置文件:/etc/mypythonprogram.rc。可以有一个环境变量告诉程序使用备用配置文件,以获得灵活性。

答案 1 :(得分:0)

为什么要手动启动/停止它?似乎使用init脚本会很有帮助。您可以在httpd.conf文件中指定httpd进程应运行的用户名,也可以指定环境设置。对于RedHat / CentOs,这看起来像:

将环境设置添加到文件/ etc / sysconfig / httpd中(或者,您可以设置命令从另一个文件读取这些环境变量,并在必要时在.bashrc中设置相同的命令 - 所以只有一个文件包含您需要的环境设置。

修改/etc/httpd/conf/httpd.conf文件,以便运行httpd进程的用户是非root用户(默认情况下,它应该是RedHat / CentOs中的apache)。

完成后,使用/etc/init.d/httpd启动和停止该过程,您应该处于良好状态。

根据海报的评论更新:

您不想从您的bashrc中读取...并使用/usr/init.d/httpd restart(它就像apache2ctl一样简单)...至于如何执行此操作,请将环境变量放入一个新文件。在下面的示例中,我假设您正在使用文件“/ etc / httpd / envconfig”。然后将这些行添加到bashrc和/ etc / sysconfig / httpd:

if [-f / etc / httpd / envconfig];然后     。的/ etc / httpd的/ envconfig 网络

现在你的bash和你的httpd脚本都应该使用更新的环境变量。

另外需要注意的是,在Apache中处理CGI环境变量的方式不同,您可能需要查看此URL:

http://httpd.apache.org/docs/2.2/env.html

特别是,“......变量也可以从使用PassEnv指令启动服务器的shell环境传递......”

我相信您需要在httpd.conf文件中放置适当的“PassEnv”指令,指定您希望传递给CGI脚本的环境变量的名称。好消息是您不必指定值,因此只要您不更改变量本身的名称,就不必管理两个配置。