gpt4 book ai didi

perl - 使用 Perl 和 Cron 的用户拥有的文件的权限被拒绝

转载 作者:行者123 更新时间:2023-12-02 08:41:50 26 4
gpt4 key购买 nike

我进行了广泛的搜索,但找不到类似这样的内容。

我在一个目录中有一个由“apache”拥有和写入的日志文件,该目录也由“apache”拥有和写入:

-rw-rw-r-- 1 apache apache 0 Apr  9 16:43 /var/log/apache2/load.log

我有一个 Perl 程序“load.pl”,包含以下内容:

my $log = "/var/log/apache2/load.log";
my $error = "";

#...doing useful stuff here, where $error might get set

if ($error && $log)
{
if (open (LOG, '>>$log'))
{
print LOG "[".localtime(time)."] ".$error."\n";
close (LOG);
}
else
{
my $reason = $!;
$error .= "Could not open log file as ".getpwuid($>)." (really ".getpwuid($<)."): $reason";

my $subject = "load.pl could not write to $log";
$error .= email($mailto, $replyto, $subject, $error);
}
}

其中定义了 $mailto、$replyto 和 email() 子例程并正常工作。

我通过 crontab 运行这个程序如下:

*/1 * * * *     apache  flock -x -w 10 /home/web/load.txt -c "perl /home/web/load.pl> /home/web/load.txt 2>&1"

Load.txt 获取 STDOUT,这是一些从 JavaScript 调用的 JSON 格式的网站负载统计信息,而任何捕获的错误都应该写入 load.log。除了日志写入外,一切正常。

我通过电子邮件收到以下输出...

Subject: load.pl could not write to /var/log/apache2/load.log
Could not open log file as apache (really apache): Permission denied

很明显,Perl 正在将这个程序作为“apache”执行——既有效又真实的 UID。但是我在 apache 拥有的目录中获得 apache 拥有的文件的权限被拒绝。

最佳答案

使用单引号不会扩展变量:

if (open (LOG, '>>$log'))

改用双引号。

关于perl - 使用 Perl 和 Cron 的用户拥有的文件的权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15913745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com