簡體   English   中英

無法通過perl File :: Tail讀取文件

[英]Unable to read file by perl File::Tail

我正在嘗試使用perl CGI獲取nginx日志文件的實時尾部。 我已授予文件為644的權限。我的perl cgi代碼如下:

#!/usr/bin/perl
use CGI;
use File::Tail;

print "Content-type: text/html\n\n";

$| = 1; #set auto flush on

# param for specifying number of lines to tail.
#$n =  CGI::param('n');
$n = '20';
$file_name = "/var/log/nginx/access.log";

#show 100 lines by default
$tail = $n?$n:100;

# specifying default as of now
$file_name = $file_name?$file_name:"$file_name";

# tail -n <tail_lines>. Start with tail_lines
$tail_lines=10;

$tail_file=File::Tail->new(name=>$file_name,
                            maxinterval=>2,
                            adjustafter=>1,
                            maxbuf=>16384,
                            tail=>$tail_lines);


while (defined($readline=$tail_file->read))
{
    print $readline."</br>";
}

我已獲准如下

-rw-R - R--。 1 nginx nginx 32565 1月7日17:17 /var/log/nginx/access.log

而且我只用tailf面對這個問題..............

Nginx日志中相關的權限

[Tue Jan 07 17:16:07 2014] [error] [client 127.0.0.1] Error opening /var/log/nginx/access.log: Permission denied at /var/www/cgi-bin/clarity.pl line 32, referer: http://host:8888/clarity.html

幫助我擺脫這個問題...?

您是否進行了某些設置,以使perl CGI腳本作為單獨的用戶運行?

通常,大多數現代的nginx安裝都有以不同用戶身份執行的腳本。 這樣,如果有人侵入您的CGI腳本,他們就不會輕易影響實際的Web服務器進程。

您可以嘗試類似

print "real uid: $<, effective uid: $>\n";

在一個單獨的CGI腳本中以測試您的腳本實際以哪個用戶身份運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM