정말 머리가 아프네요. 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
불행하게도 문제는 전체 경로를 포함하지 않고(필요하지 않은 것 같지만) 작은따옴표 대신 큰따옴표를 사용하는 조합입니다.