指定したドメイン宛ての電子メールを受信するたびに、postfix 電子メール サーバーから perl スクリプトをトリガーしています。perl スクリプトは基本的にすべての添付ファイルを抽出し、unoconv を呼び出して添付ファイルを PDF 形式に変換します。
私は現在、同じ添付ファイルを持つ常に同じ電子メールでスクリプトをテストしていますが、ランダムな動作が見られます。次のような unoconv コマンドを呼び出すと、すべての添付ファイルが変換されることがあります。
unoconv -f pdf -o /tmp/2151DC80-A545-11E4-880B-D7DC6512523E/ '/tmp/2151DC80-A545-11E4-880B-D7DC6512523E/attachments/21887524-A545-11E4-880B-D7DC6512523E-test.doc'
いくつかのレース状態の問題または類似のように見えます。何が問題になる可能性がありますか?
更新:問題は、unoconv が浮動小数点例外で終了することがあるようですが、ドキュメントは正常に変換されました (PDF ビューアーで開くことができます)。エラーが表示される関数のコードを次に示します。このような場合、どのように手続きを進めるかが今問題になっています。
################################################################################
# Convert attachments to PDF #
################################################################################
sub convertAttachments() {
$logger->info("converting attachments");
mkdir $email_converted_attachment_dir;
opendir(DIR, $email_attachment_dir) or die $!;
while (my $file = readdir(DIR)) {
next if ($file =~ m/^\./);
$logger->info("Converting attachment: ".$email_attachment_dir.$file);
$conv_result = "unoconv -v -T 10 -f pdf -o ".$email_converted_attachment_dir." '".$email_attachment_dir.$file."'";
$logger->info("Running Command: ".$conv_result);
system($conv_result) and die "Can't launch unoconv: $!";
}
closedir(DIR);
}