• ベストアンサー

.forwardで実行されない?

届いたメールをテキストに書き出したいのですが、思うように動作せず、手詰まりになりました。 [環境] VineLinux 4.2 postfix perl5.8 [.forward] "|exec /home/test/test.pl" [test.pl] #!/usr/bin/perl open(OUT,"> test.txt"); while(<STDIN>){ print OUT $_; } close(OUT); exit; [パーミッション] .forward 644 test.pl 755 test.txt 666 testディレクトリ 755 postfixのログには delivered to command: exec /home/test/entry.pl となっており、動作してると思うのですが、test.txtには何も書き出されません。 考えられる原因は何でしょうか? 暇なときで構わないので、教えていただけたら幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.1

プログラム実行時のカレントディレクトリの問題では ないでしょうか。 open(OUT,"> /home/test/test.txt") or die; としたら、どうなりますか。

dolce_g
質問者

お礼

とりあえず解決しました。 原因はentry.plの書き方に問題があったようです。 [entry.pl] #!/usr/bin/perl open(OUT,"> /home/test/test.txt") or die; while($_ = <STDIN>){ print OUT $_; } close(OUT); exit; で書き出すことができました。 アドバイスありがとうございました。

dolce_g
質問者

補足

回答ありがとうございます。 まず、誤字があったので訂正します。 [.forward] "|exec /home/test/test.pl"       ↓ [.forward] "|exec /home/test/entry.pl" 結果ですがtest.txtには何も書き出されなく、postfixのログも変化がない状態です。 本当にSTDINに格納されているのか?って疑問に思えてきました。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

とりあえず、.forward を書き換えてエラー出力を見てみる。 "|sh 2>/tmp/forward.log -c /home/test/test.pl" 手がかりがつかめそうに思います。1番さんのアドバイス通り、test.txtはフルパスで。

dolce_g
質問者

お礼

とりあえず解決しました。 原因はentry.plの書き方に問題があったようです。 [entry.pl] #!/usr/bin/perl open(OUT,"> /home/test/test.txt") or die; while($_ = <STDIN>){ print OUT $_; } close(OUT); exit; で書き出すことができました。 アドバイスありがとうございました。

dolce_g
質問者

補足

回答ありがとうございます。 .forwardを書き換えました。 "|exec /home/test/entry.pl"       ↓ "|sh 2>/tmp/forward.log -c /home/test/entry.pl" 結果 test.txtは空のままです。 postfixのログも変化がないです。 /tmpにforward.logが作成されましたが、空の状態です。 test.txtは常に空ですがタイムスタンプは更新されるので気持ちが悪い感じなんですよね。

関連するQ&A