繁体   English   中英

Apache httpd不会加载.bashrc

[英]Apache httpd doesn't load .bashrc

我在Apache 2.2下将Python脚本作为CGI运行。 这些脚本依赖于.bashrc中设置的环境变量才能正常运行。 .bashrc从未加载,我的脚本失败了。

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

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

考虑到这些限制,在调用CGI时如何加载.bashrc?

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

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

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

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

为什么要手动启动/停止它? 似乎使用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 restart(就像apache2ctl一样简单)...至于如何执行此操作,请将环境变量放入一个新文件中。 在下面的示例中,我假设您正在使用文件“ / etc / httpd / envconfig”。 然后将这些行添加到您的bashrc和/ etc / sysconfig / httpd中:

如果[-f / etc / httpd / envconfig]; 然后 。 / etc / httpd / envconfig fi

现在,您的bash和httpd脚本都应该与更新的环境变量一起使用。

还有一点需要注意的是,CGI环境变量在Apache中的处理方式有所不同,您可能需要查看以下URL:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM