如何PATH
为 Apache2 设置环境变量?我尝试在/usr/sbin/envvars
httpd.conf 中设置它SetEnv PATH
(并使用 PassEnv 将其传递给 SSI),但就是无法进行。
答案1
正如其他人所说,您可以通过使用环境变量文件来执行此操作。 我将在此答案中提供更多详细信息,并证明其有效。
此环境变量文件必须来自apachectl
。在我的 Ubuntu 机器上,此文件位于/etc/apache2/envvars
。在 RedHat 上,此文件位于/etc/sysconfig/httpd
。在 FreeBSD 上,此文件设置在/etc/rc.conf
(我认为)。或者,您也可以在启动脚本(/etc/init.d/httpd
或apachectl
等)中设置此信息。但是,我认为最好尽可能不要修改启动脚本。最佳位置是在指定的环境变量脚本中。
验证此 envvars 文件的位置。在 Ubuntu 上,
/etc/init.d/apache2ctl
显示其来源/etc/apache2/envvars
:# the path to the environment variable file test -z "$APACHE_ENVVARS" && APACHE_ENVVARS='/etc/apache2/envvars' # pick up any necessary environment variables if test -f $APACHE_ENVVARS; then . $APACHE_ENVVARS fi
为了查看变量,我使用Perl printenv.cgi 脚本,并发布于http://example.org/cgi-bin/printenv.cgi。该脚本显示了以下路径:
PATH = /usr/local/bin:/usr/bin:/bin
为了更改这些变量,我编辑了 envvars 文件:
$ sudo vim /etc/apache2/envvars
在此文件中修改您的 PATH。在此示例中,我将附加
/opt/local/bin
到我的 PATH。在某些情况下,您可能需要使用export PATH
而不仅仅是PATH
:export PATH=$PATH:/opt/local/bin
重启 Apache
$ sudo service apache2 restart * Restarting web server apache2 ... waiting ...done. $
查看结果http://example.org/cgi-bin/printenv.cgi,现在显示 PATH 现在包含一个新元素:
PATH = /usr/local/bin:/usr/bin:/bin:/opt/local/bin
如果上述方法不起作用,则可能发生了一些异常。也许您的脚本忽略或覆盖了 PATH。
答案2
在 2.2 中,无法使用 Setenv 设置 PATH 环境变量。
答案3
在我的系统上它是/etc/apache2/envvars
。
答案4
您可以在初始化脚本的功能中设置它start()
,如下所示:
start() {
echo -n $"Starting $prog: "
check13 || exit 1
export PATH=${PATH}:/var/ossec/bin
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
创建一个 Perl 脚本来列出所有环境变量:
#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";
foreach $key (sort keys(%ENV)) {
print "$key = $ENV{$key}<p>";
}
将其放入/var/www/cgi-bin
,并检查http://domain.com/cgi-bin/env.cgi
,您将看到以下内容:
PATH = /sbin:/usr/sbin:/bin:/usr/bin:/var/ossec/bin