这实在是让我摸不着头脑。我在 RHEL 7 服务器上有一个 PERL 脚本,它通过 MIME::Lite 创建 xlsx 文件并将其通过电子邮件发送给几个人。如果我从命令行运行脚本,它工作正常。如果 cron 调用该脚本,当它尝试将文件附加到电子邮件时,它会返回“/software/YAVALN/yln/holds_not_being_pulled.xlsx:不可读”。 cron 和脚本具有相同的用户。该文件的权限是644。这会是什么原因造成的?
更新:据我所知,这是失败的代码部分。请注意,“或死亡”没有被触发,所以我不确切知道“不可读”消息在哪里返回。在前面的部分中,它写入 Excel 文件,我可以看出它已成功发生,因为日期/时间已更新(如果我删除该文件并再次运行脚本,它会创建一个工作 Excel 文件)。
我刚刚添加了取消链接行。它既不会引发错误,也不会删除文件。我什至尝试将权限设置为 777。我还尝试设置完整路径而不仅仅是本地文件名。什么都不起作用。
我在另一个目录中有脚本,它们使用相同的 PERL 模块并且工作正常。我比较了脚本和目录的所有权和权限。
if (length($offenders) > 0) {
my $msg = MIME::Lite->new(
From => '[email protected]',
"Reply-To" => '[email protected]',
To => '[email protected]',
Subject => 'Libraries not pulling holds',
Type => 'multipart/mixed',
);
$msg->attach(
Type => 'TEXT',
Data => "These libraries have not pulled holds for a minimum of $bizdayslimit business days. \n\nLibraries represented: $offenders",
) or die "Text attach failed: $!\n";
$msg->attach(
Type => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
Path => 'holds_not_being_pulled.xlsx',
Filename => 'holds_not_being_pulled.xlsx',
Disposition => 'attachment'
) or die "Excel file attach failed: $!\n";
$msg->send or die "Send failed: $!\n";
unlink('holds_not_being_pulled.xlsx') or die "Can't delete file: $!";
}
答案1
遗憾的是,问题是不包含完整路径(即使我似乎不需要它们)和使用双引号而不是单引号的组合。