- ベストアンサー
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); ==============================
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#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);
その他の回答 (3)
- ppg-2
- ベストアンサー率39% (77/193)
#1です。成る程。 ではこれでどうですか? ("sh /home/httpd/wwwroot/bbstest/mail_plain.bash");
お礼
アドバイス頂いておいて、大変恐縮なのですが、 原因はシェル側でした。 シェルをそのまま実行した際、見かけ上うまくいっていたので勘違いしていました。 上のような書き方もできるというのは参考になりました。 有難うございました。
- carcosa
- ベストアンサー率100% (1/1)
少々うかがいます。 > sendmail3.cgi 655 とありますが、実行パーミッションを立てないのですか?
補足
実行パーミッションとは、オーナの部分ですね? やってみましたがダメでした。
- ppg-2
- ベストアンサー率39% (77/193)
ファイル名が違うようですが .bashではなく.shでは? ("/home/httpd/wwwroot/bbstest/mail_plain.bash"); ↓ ("/home/httpd/wwwroot/bbstest/mail_plain.sh");
補足
すみません。書き間違いでした。 正しくは、mail_plain.bash(755)でした。 system("");や`(バッククウォート)`も試しましたがうまくいきません。 うまくいくと、メールが届くはずなんですが。 サーバの方の、httpd.confにAddHandlerでcgi-scriptに.shと.bashがないのが原因かと思ったのですが、これも違いました。
お礼
具体的なアドバイスを頂き有難うございます。 上のものを試してみたら、 exit status = 512 Can't create temporary directory! でした。 mail_plain.bashで作業用のディレクトリを作るようにしていたのですが、そこがうまくいってなかったんですね。 Perlの質問する場所なのに、シェルが原因だったなんて、勉強不足でした。 大変お世話になりました。