cronがスクリプトを呼び出すと、ファイルを読み取ることができません。

cronがスクリプトを呼び出すと、ファイルを読み取ることができません。

本当に頭が痛いです。 MIME :: Liteを介してxlsxファイルを生成し、複数の人に電子メールで送信するRHEL 7サーバーにPERLスクリプトがあります。コマンドラインからスクリプトを実行すると正常に動作します。 cronがこのスクリプトを呼び出すと、ファイルを電子メールに添付しようとすると、「/software/YAVALN/yln/holds_not_being_pulled.xlsx:unreadable」が返されます。 cronとscriptは同じユーザーを持っています。このファイルの権限は644です。この問題の原因は何ですか?

修正する:私が知っている限り、この部分はコードが失敗する部分です。 「or die」はトリガーされないため、「読み取れない」メッセージが返される場所を正確に知ることはできません。前のセクションでは、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

残念ながら、問題は完全なパスを含めずに(必要ではないようですが)一重引用符の代わりに二重引用符を使用する組み合わせです。

おすすめ記事