cron 调用脚本时文件不可读

cron 调用脚本时文件不可读

这实在是让我摸不着头脑。我在 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

遗憾的是,问题是不包含完整路径(即使我似乎不需要它们)和使用双引号而不是单引号的组合。

相关内容