我正在CentOS上运行monitorix ,使用我的apache服务器(而不是内置的服务器),除了虚拟主机之外,
Alias /monitorix /usr/share/monitorix <Directory /usr/share/monitorix> Options -Indexes +FollowSymLinks Order allow,deny Allow from all AllowOverride All </Directory> <Directory /usr/share/monitorix/cgi> AddHandler cgi-script .cgi SetHandler perl-script PerlResponseHandler ModPerl::Registry PerlOptions +ParseHeaders Options +ExecCGI +FollowSymLinks Allow from all AllowOverride All </Directory>
此外,以下configuration为monitorix本身:
base_dir = /usr/share/monitorix/ base_lib = /usr/lib/monitorix/ base_url = /monitorix base_cgi = /monitorix/cgi
当我打开URL http://domain.com/monitorix时 ,我得到正确显示Monitorix版本v3.4.0的HTML界面。 所以httpdconfiguration似乎工作正常。
当我点击[确定]button,我得到这个错误:
致命的:Monitorix是无法继续!
没有find文件“monitorix.conf.path”。
请确保“base_dir”选项已正确configuration,并且此CGI(monitorix.cgi)位于“base_dir”/ cgi /目录中。
并且不要忘记重新启动Monitorix以使更改生效!
我的http日志文件显示了这一点:
[Fri Mar 28 10:26:01 2014] [error] FATAL: File 'monitorix.conf.path' was not found! at /usr/share/monitorix/cgi/monitorix.cgi line 210.\n
这告诉我CGI也能正常工作。 httpd confirm中的path似乎也没问题,并且在monitorix config中匹配的path似乎也是正确的。
但不知何故path不正确。 我尝试了base_dir,没有结尾的斜杠,但是没有帮助。
行210尝试之前的/usr/share/monitorix/cgi/monitorix.cgi文件
open(IN, "< monitorix.conf.path"); my $config_path = <IN>; chomp($config_path); close(IN);
文件/usr/share/monitorix/cgi/monitorix.conf.path也存在。
我不太了解PERL,谁能告诉我这里有什么问题?
这个Perl CGI monitorix.cgi
根本找不到名为monitorix.conf.path
configuration文件。
当你只显示Perl文件的一个片段时,这只是猜测:
monitorix.conf.path
,你必须在/usr/share/monitoryx/cgi/
/usr/share/monitoryx/
base_dir/cgi/
查找它,而不是base_dir/cgi/
因为它是在单击button时得到的错误消息中解释的。 当然,这是最好的猜测。 Perl CGI仍然有机会在一个完全不同的地方寻找它的configuration文件。
我发现这个问题:mod_perl被启用并与cgi混淆,以find位于同一目录中的文件。
感谢来自#freenode.net #monitorix IRC频道的Mikaku来解决这个问题!