• ベストアンサー

Perl からbashを呼び出したい

Perlからbashのファイルを呼び出そうとしています。 sendmail2.cgiは、呼び出せていまが、 sendmail3.cgiは、呼び出せません。 bashのファイル自体は、./(bashファイル)とやると実行できます。 パーミッションは、 sendmail3.cgi 655 mail_plain.sh 755 sendmail2.cgi 705 mailsend.sh 705 です。 パスの設定の問題かとも思ったのですが、よくわかりません。 宜しくお願いします。 ===sendmail2.cgi============= #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<P>sendmail test</P>\n"; print "mailtest\n"; print "</HTML>\n"; exec('/home/httpd/wwwroot/yoshida/mailsend.sh'); exit(0); ============================== ===sendmail3.cgi============= #!/usr/bin/perl exec("/home/httpd/wwwroot/bbstest/mail_plain.bash"); exit(0); ==============================

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

  • ベストアンサー
  • carcosa
  • ベストアンサー率100% (1/1)
回答No.3

#2 です。 問題の原因が a. mail_plain.bash が起動出来ないのか b. mail_plain.bash の内部で問題が発生しているのか のどちらなのかを調査されてみてはいかがでしょうか? 上記のいずれかによって対策も変わってくるのではないかと思います。 例えば、以下の様なスクリプトを流してみるとか... #!/usr/bin/perl my(@buf); my($rc); unless( open S, '/home/httpd/wwwroot/bbstest/mail_plain.bash 2>&1|' ) { print "Status: 500 ERROR\n"; print "Content-Type: text/plain\n\n"; print "ERROR.\n"; exit(0); } @buf = <S>; close S; $rc = $?; print "Status: 200 OK\n"; print "Content-Type: text/plain\n\n"; print "exit status = ",$rc,"\n"; print @buf; exit(0);

Momoda
質問者

お礼

具体的なアドバイスを頂き有難うございます。 上のものを試してみたら、 exit status = 512 Can't create temporary directory! でした。 mail_plain.bashで作業用のディレクトリを作るようにしていたのですが、そこがうまくいってなかったんですね。 Perlの質問する場所なのに、シェルが原因だったなんて、勉強不足でした。 大変お世話になりました。

その他の回答 (3)

  • ppg-2
  • ベストアンサー率39% (77/193)
回答No.4

#1です。成る程。 ではこれでどうですか? ("sh /home/httpd/wwwroot/bbstest/mail_plain.bash");

Momoda
質問者

お礼

アドバイス頂いておいて、大変恐縮なのですが、 原因はシェル側でした。 シェルをそのまま実行した際、見かけ上うまくいっていたので勘違いしていました。 上のような書き方もできるというのは参考になりました。 有難うございました。

  • carcosa
  • ベストアンサー率100% (1/1)
回答No.2

少々うかがいます。 > sendmail3.cgi 655 とありますが、実行パーミッションを立てないのですか?

Momoda
質問者

補足

実行パーミッションとは、オーナの部分ですね? やってみましたがダメでした。

  • ppg-2
  • ベストアンサー率39% (77/193)
回答No.1

ファイル名が違うようですが .bashではなく.shでは? ("/home/httpd/wwwroot/bbstest/mail_plain.bash");     ↓ ("/home/httpd/wwwroot/bbstest/mail_plain.sh");

Momoda
質問者

補足

すみません。書き間違いでした。 正しくは、mail_plain.bash(755)でした。 system("");や`(バッククウォート)`も試しましたがうまくいきません。 うまくいくと、メールが届くはずなんですが。 サーバの方の、httpd.confにAddHandlerでcgi-scriptに.shと.bashがないのが原因かと思ったのですが、これも違いました。

関連するQ&A