本当に頭が痛いです。 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
残念ながら、問題は完全なパスを含めずに(必要ではないようですが)一重引用符の代わりに二重引用符を使用する組み合わせです。