• ベストアンサー

.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には何も書き出されません。 考えられる原因は何でしょうか? 暇なときで構わないので、教えていただけたら幸いです。

  • Perl
  • 回答数2
  • ありがとう数5

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

  • ベストアンサー
  • 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% (4849/10263)
回答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

  • Postfixでメールを受信したらPerlスクリプトを実行したい

    Solaris10で構築したサーバにて、ユーザー宛のメールを受信したら Perlで記述したスクリプトを実行したい為、下に記載の手順1及び2の 方法で受信メールを渡すパイプを記述したのですがスクリプトが実行されませんでした。 手順1,2共に他のメールアドレスへ転送させた場合、メールの転送は正常に行われました。 メールを受信したらPerlスクリプトを実行するには、どのように設定すればよいのでしょうか? main.cfやmaster.cfに更なる設定の記述が必要なのでしょうか? 主な環境は下記の様になっているのですが不足がありましたら御指摘下さい。 申し訳ありませんがよろしくお願いします。 【手順1】~/.forwardによるスクリプト起動     (1)~/.forwardに、下記の様な記述をしましたがスクリプト起動せず。 (.forwardの記述)        (パターン1) \username,"|/home/username/test.pl"        (パターン2) "|/home/username/test.pl"        (パターン3) |"/home/username/test.pl"        (パターン4) "|/usr/local/bin/perl /home/username/test.pl"        ※下記のような転送は処理されました         \username,username@test.ne.jp 【手順2】main.cf修正によるスクリプト起動     (1)/usr/local/etc/postfix/main.cfに下記行を作成       alias_maps = hash:/usr/local/etc/postfix/aliases,hash:/usr/local/etc/postfix/usr_alias       (usr_aliasの記述) username: :include:/home/username/include       (includeの記述) |"/home/username/test.pl"               他に上記.forwardの記述の4パターンを試しましたが全てスクリプト起動せずでした。 【サーバ環境】 OS:Solaris10(Sparc) MTA:postfix-2.5.3 【test.plの内容】 #!/usr/local/bin/perl open(DATA_FILE, "> test_log.txt"); print DATA_FILE "Test_OK!!!\n"; close(DATA_FILE);     ※備考       ・保存場所:/home/username/test.pl       ・パーミション:test.plと/home/username共に777 (オーナはusername) 【main.cfについて】 念のために allow_mail_to_files = alias,forward,include allow_mail_to_commands = alias,forward,include の記述を追加しています。

  • .forwardから呼び出すperlプログラムに引数を付ける事は可能ですか?

    はじめまして。Perlの初心者ものです。 よろしくお願い致します。 .forwardから呼び出すperlプログラムに引数をつけて プログラム内で引数とメール内容を処理に使用したいので すが、出来るのでしょうか? 例えば.forwardの中身を |/XXX/test.pl p1 と、記入して、 test1.pl内で引数によって、メールの内容を違ったファイルに保存したいです。 よろしくお願い致します。

  • なぜか実行されません

    Win2003サーバーに「test」フォルダがあり、その中に「test.pl」という Perlのファイルがあります。 (testフォルダのアクセス権設定は完了済み) WinXP pro2 のクライアントPCのCドライブ直下に(ActiveState ActivePerl5.6)がインストールされています。 バッチファイルを作成し、クライアントPCのPerlを使用してtest.plを動作させたいのですが、「cannot open」と表記されてしまいます。 作ったバッチファイルは以下のとおりです。 test1.bat------------------------------------------------- "C:\Perl\bin\perl.exe" "\\@@@.@@@.@@@.@@@\test\test.pl" (@には数字が入りサーバーのIPアドレスです) ---------------------------------------------------------- test2.bat------------------------------------------------- "C:\Perl\bin\perl.exe" "Z:\test\test.pl" (ネットワークドライブをZドライブとしてマウント状態で実行) ---------------------------------------------------------- 1と2両方とも同じエラーが表示され実行されません。 testフォルダにtest.textを作成しwordpadで、開くようにした ========================================================== "C:\Program Files\Windows NT\Accessories\wordpad.exe" "Z:\test\test.txt" ========================================================== は、問題なく実行できているため、アクセス権限ではじかれているとも思えないのです。 (test.txt)(test.pl)ともにまったく同じアクセス権限設定がされています。 いったい何が原因なのでしょうか? 解決方法がございましたらご教示ください。 よろしくお願いいたします

  • cronでのPerlスクリプト実行

    少し前に同様の質問をしましたが、やはり解決していませんでした。 #!/usr/bin/perl open(OUT,">/home/test/test.log"); print OUT "OK"; close(OUT); このスクリプトをcrontabに以下のように記述しました。 0 0 * * * /home/test/test.pl > /dev/null 2>&1 パーミッションは省略します。 このようにすると、正常にtest.logが出力されました。 しかし、本当に実行したいスクリプトを同様にしたところ、 正常に動作しませんでした。cronログには記録されます。 実際のスクリプトは長いのでここには掲載できませんが、 主な処理はおおよそ次のようなことをしています。 ・pmとplモジュールがあり、plからpmを呼び出している。 ・plもpmも自作のユーザ関数の組み合わせ ・ファイルはtestユーザが所有し、実行権限は777。  (動作確認後、徐々に落としていきます) ・plでは、use encoding 'utf8'。 ・スクリプトにオプションを付けて、引数を読み込む。 ・loggerでsyslogへ結果を出力。 ・子プロセスを生成して処理の一端を行わせている。 ・opendir、readdirなどを使用。 ・xxxxxx.datファイルを読み書きしている。 ・CPANにあったメール送受信モジュールを使用している。 ・ファイルをbz2圧縮している。 などです。 コマンドラインから実行すると確実に正常に動作します。 気になるのはPerlスクリプトの内容でモジュールを使うときは、 パスが通っていてもフルパス指定しないといけないのでしょうか? しかし、フルパスと言ってもせいぜいsystem()で実行するコマンドを フルパスにするくらいしか思いつきません。 うまく実行できない理由として考えられる可能性があることを 教えてもらえませんか? 根本的な解決としては、cronでの実行とコマンドラインからの実行は 何が違うのかが明確になれば対処できるのかもしれません。 よろしくお願いします。

  • postfixの.forwardでメールの転送利用

    お世話になります。 postfixの.forwardでメールの転送機能を利用したいと思っております。 ただ、各アカウントのホームディレクトリに.forwardファイルを作り中身をただしく記入しても 上手く転送機能が働きません。 例 ~/Maildir/ xxxxx1@xxxx logwatchを見ると、下記のようなエラーが出ているようです。しかしエラーで検索してもそれらしい回答が見つからなかったので質問させていただきました。 Unrecognized warning: cannot open file /home/xxxxx1/.forward: Permission denied : 5 Time(s)  file /home/xxxxx2/.forward has bad owner uid 13965 : 1 Time(s) よろしくお願いいたします postfix-2.3.3です。

  • シェルが実行されません

    WWWユーザから、 Process process = Runtime.getRuntime().exec("java -classpath /xx/xx/xx /export/home/test/B001"); は動くのですが、 Process process = Runtime.getRuntime().exec("java /export/home/test/B001.sh"); のようにシェルを呼び出しても動作しません。 また、hulftのジョブ起動からもシェルが動かないのですが、原因は何が考えられますでしょうか? シェルのパーミッションは755なのですが・・

  • .forwardを利用した、メールをトリガーにするPHPの起動について

    初めて質問させていただきます。 初めてなので、質問の仕方にも不手際があるかもしれませんが ご容赦ください。 サーバーはWEBアリーナさんのをお借りしています(webarenasuite2) メールはPostfixで受信しています。 <<目的>> メールの受信をトリガーにしてPHPプログラムを起動させようとしております。最終的にはメールの本文などのDBに取り込もうとしていますが、とりあえずプログラムを起動できるかを確認したかったのでメールの内容などは関係なくDBに適当な名前のテーブルを作成するようなプログラムになっています。 <<症状>> 対象のメールアドレスにメールを送ると、エラーメッセージなどは一切返ってきません。が、望む動作も一切しません。 直接test.phpをブラウザで動かすと、DBにテーブルを作成します(望んだ動きです)。 おそらくtest.phpを.forward経由で動かせていないのだろうと思いますが、その理由がわかりません。 自分が確認したことを以下に記します。 (1).forwardの置き場所 プログラム起動ではなく、メール転送の記述を行い、メールの転送が行われることを確認しました。.forwardの置き場所は間違えていないかと思います。 (2).forwardのパスの確認 .forwardには以下の記述がしてあります。 |"/usr/bin/php -q /home/*****/web/test.php" phpが/usr/bin/phpなのはおそらく間違いないかと思います。 また、絶対パスの指定はtest.phpにrealpathの記述を書いて 確かめました。 (3)パーミッションの確認 .forwardは600 test.php自体や、その上の階層のwebや*****、homeなどもパーミッションも実行権限を与えてみました。755などになっています。 以上です。 2日以上詰まってしまいました。 お手数をおかけしますが、お手すきの方がいらっしゃいましたら、よろしくおねがいします。

    • 締切済み
    • PHP
  • phpで外部ファイルの実行方法を教えて下さい。

    現在、linux、phpでアプリケーションの開発をしているのですが、まだまだ素人で、外部ファイルの実行がうまくできません。 どなたかご教授していただけますでしょうか。 【やりたいこと】 ・phpファイルで同じサーバー内にあるphpファイルを実行する。 以前は実行するファイルがperlであり、phpファイルで、 exec("perl /var/www/test/encoder/test.pl"); を記述することで、うまくtest.plが実行されていました。 今回、test.plをphpに書き直し、tet.phpを実行したいのですが、 なかなかうまくいきません。 exec、systemなどを色々試み、ネットでも調べてみたのですがうまくいかないので、どなたかご教授いただけますでしょうか。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • /etc/aliasesに設定した、sendmailからのプログラム処理はどのアカウントで行われる?

    こんにちは。 タイトルの通りですが、 /etc/aliasesに設定した、sendmailに登録されたメールアカウントに メールが届くと設定したPerlスクリプトが実行されるようにしました。 mail_address: "|/aaa/aaa.pl" (aaa.plはテキストファイルに文字列を記入するだけ。 パスは適当ですが、実際にはあっています) こちらからaaa.plが処理されても、 ある特定のフォルダ(/bbb/test.txt)のテキストファイルに対して 文字列が書き込まれなくて困っています。 そのプログラム自体は正しく動作しています。 ここで例をあげているtest.txtのパーミッションは777にしてあります。 しかし、そのフォルダ/bbbのパーミッションは770になってまして、 これが書込みをさせない原因なのかな?と。 別のフォルダにあるtest.txt(そのフォルダのパーミッションは775)は 正常に動作するので間違いないとは思います。 /etc/aliasesに設定した、sendmailから起動させる処理の アカウントがなんなのかよくわからないのです。 おそらくここでいう「その他」扱いになっているとは思うのですが、 それはそういうものなのでしょうか? /etc/aliasesはrootで設定するため、そこで設定した処理は rootに近いアカウントで起動されるものだと思っていたのですが…。 ちょっとわかりずらい文章で申し訳ないですが、 どなたかぜひともご教授ください。

  • テキストファイルに書き込めない(ファイルの所有者と実行者の違いか?)

    テキストファイルにログを書き込む以下の処理があります。 aaa.pl -------------------- open Log,">>aaa.txt"; print Log 'test'; close Log; Web上(アパッチ)からこのaaa.plを実行すると 正常に処理されて、aaa.txtに書き込まれます。 (aaa.txtのオーナーはwww。属性は644) それとは別に、/etc/aliasesに 特定のメールアカウントにメールが送られた時に このaaa.plが実行されるように設定しているのですが mail_address: "|/ccc/aaa.pl" (パスは適当ですが、実際にはあっています) こちらからaaa.plが処理させても、 aaa.txtに文字列が書き込まれなくて困っています。 open Log,">>aaa.txt"; chmod 666,"aaa.txt"; ... とPerl側でパーミッションを変更させようとしても うまく変更されていません。処理もされません。 おそらくaliasesに設定したPerlの実行権限者が ファイルの所有者(この場合www)と異なる為 書き込みもchmodもうまくいかないと思うのです。 aliasesで実行させるアカウントは いったいどのようなアカウントなのでしょうか(binユーザーとか?) また、これを回避するにはどのようにすればよろしいでしょうか? どなたかご存知の方、どうぞよろしくお願い致します。

    • ベストアンサー
    • Perl