• 締切済み

openでのファイルの書き込みについて

現在、メールを受信した際に、そのメールを別のアドレスに転送し、さらにサーバーに保存する、といったプログラムを作成しています。 メールを転送する処理が無事完成し、いざ書き込みを、と思っていたのですが ファイルの書き込みがうまくできません。 メール受信時に、以下のようにメールフィルターの振り分けにて動作させています。 | /usr/bin/perl /home/hoge/public_html/piyo.cgi 書き込み処理はこのようにしています。 open(OUT, "+>foo.txt") or die "Can't open : $!"; flock(OUT, 2) or die "Can't flock : $!"; seek(OUT, 0, 0) or die "Can't seek : $!"; print OUT "piyo\n"; truncate(OUT, tell(OUT)) or die "Can't truncate: $!"; close(OUT); とくにdieで処理が終了しているわけではなく、この後の処理も正常に行われているのですが foo.txtへの書き込みが行われません。 また、メール受信時ではなく、通常アクセスでの場合はこの処理でファイルが正常に書き込まれることを確認しました。 エラーがでてとまるわけではなく、状況がわからず困っております。 皆様の知恵をお貸しください。よろしくお願いいたします。

みんなの回答

  • uni-taka
  • ベストアンサー率46% (6/13)
回答No.2

ファイル追加書き込み以外の処理は、本当にきちんと行われていますか? プログラムの中でメール転送もしているのですか? そのメールがきちんと転送されていれば、プログラムは起動していることになりますよね。。。 ちなみに、サーバによっては、forward等からプログラム起動できないこともあります(権限の問題ですね) 同じように、実行者の権限の問題で、パーミッションエラーを起こすこともあるのかな、と思います。ディレクトリやファイルの権限等々はいかがでしょうか? 一旦、メールからPerlにパイプするときに、sudoを挟んでみてはいかがですか? root権限で実行して結果が違えば、原因が絞れるような気がするので。

yapumaru
質問者

お礼

同一プログラムでメールの転送も行っているので、プログラムが起動していることは間違いないです。 権限等も確認してみましたが、問題ないようでした。 sudoというものは初耳ですので、調べながらもう少し原因を絞ってみます。 色々ありがとうございました。

  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.1

piyo.cgiのパスが間違っているような感じがしますが、、、

yapumaru
質問者

お礼

実際にpiyo.cgiのファイル保存部分以外の処理は行われているので、パスは問題ないようです。