- ベストアンサー
.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には何も書き出されません。 考えられる原因は何でしょうか? 暇なときで構わないので、教えていただけたら幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
プログラム実行時のカレントディレクトリの問題では ないでしょうか。 open(OUT,"> /home/test/test.txt") or die; としたら、どうなりますか。
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10358)
とりあえず、.forward を書き換えてエラー出力を見てみる。 "|sh 2>/tmp/forward.log -c /home/test/test.pl" 手がかりがつかめそうに思います。1番さんのアドバイス通り、test.txtはフルパスで。
お礼
とりあえず解決しました。 原因はentry.plの書き方に問題があったようです。 [entry.pl] #!/usr/bin/perl open(OUT,"> /home/test/test.txt") or die; while($_ = <STDIN>){ print OUT $_; } close(OUT); exit; で書き出すことができました。 アドバイスありがとうございました。
補足
回答ありがとうございます。 .forwardを書き換えました。 "|exec /home/test/entry.pl" ↓ "|sh 2>/tmp/forward.log -c /home/test/entry.pl" 結果 test.txtは空のままです。 postfixのログも変化がないです。 /tmpにforward.logが作成されましたが、空の状態です。 test.txtは常に空ですがタイムスタンプは更新されるので気持ちが悪い感じなんですよね。
お礼
とりあえず解決しました。 原因はentry.plの書き方に問題があったようです。 [entry.pl] #!/usr/bin/perl open(OUT,"> /home/test/test.txt") or die; while($_ = <STDIN>){ print OUT $_; } close(OUT); exit; で書き出すことができました。 アドバイスありがとうございました。
補足
回答ありがとうございます。 まず、誤字があったので訂正します。 [.forward] "|exec /home/test/test.pl" ↓ [.forward] "|exec /home/test/entry.pl" 結果ですがtest.txtには何も書き出されなく、postfixのログも変化がない状態です。 本当にSTDINに格納されているのか?って疑問に思えてきました。