• 締切済み

CGIからのプログラム起動

現在Web上のボタンを押したときにCGIから別プログラムを起動する処理を作成しています。 処理の流れ ボタン押下→AAA.CGIが実行→BBB.sh(cshプログラム)→CCC.pl→DDD BBB.shは"unlimit datasize"を指定してCCC.plを実行しているだけです。 CCC.plは"exec"でプログラムDDDを起動 しかし上記のように処理を行うとプログラムDDDの実行結果がエラーとなってしまいます。 そこで試しにコンソール上からBBB.shを直接実行してみたのですがこのときはプログラムDDDの実行結果は正常に終了しました。 またプログラムDDDを直接実行した場合も正常に終了しました。 CGIからシェルやperlを実行するのと直接実行するのとでどういう違いがあるかアドバイスをお願いします。 原因が全く分からない状態で手詰まり状態なので手がかりになることでしたらなんでもアドバイス願います。

  • CGI
  • 回答数5
  • ありがとう数4

みんなの回答

  • eroermine
  • ベストアンサー率18% (83/444)
回答No.5

今現在 apache が動いてるアカウントはおそらく login 禁止設定になっています。 たとえばこんなふうに。 www:*:80:80:World Wide Web Owner:/nonexistent:/usr/sbin/nologin この /usr/sbin/nologin を /bin/csh 等にして コンソールからログインできるようにします。 login したら問題のスクリプトを手動で起動してみてください。 なんらかの結果を得たらまた nologin に戻すのをお忘れなく。

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.4

こちらを、ご一読してみてください。 http://httpd.apache.org/docs/2.0/ja/env.html

MOYAJI
質問者

お礼

回答ありがとうございます。 その後の調査でプログラムDDDの内部からさらに別のプログラムEEEを起動していて、このEEEの起動がエラーとなっていることがわかりました。 EEEの起動はforkで生成した子プロセス内でexecl関数を使用して実行し、親プロセスでは子プロセスの終了をwait4関数を使用して待っていました。 wait4のstatus値をWEXITSTATUSマクロで確認したところ127が帰ってきており、これをWebで検索したところshを起動できなかった場合にこの値が帰ることがあるという記述をみつけました。 このshを起動できない原因がDIooggooIDさんの仰る環境変数やpathの違いによるものなのかと思っているのですが具体的にどのように対応すればいいのかがわからない状況です。 教えていただいたURLの内容も見てみたのですが当方apache等初心者で具体的にどうすればいいのかがわかりません。 申し訳ありませんが具体的な対応方法があれば教えていただけないでしょうか。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

実行ユーザやカレントワーキングディレクトリが違ってくると思われます パーミッションやパスを確認してみては。

MOYAJI
質問者

お礼

回答ありがとうございます 実行ユーザに関してですがapacheのユーザ?でログインして実行しているのですが、その場合でもCGI経由とそうでない場合でパーミッションやパス等は異なってくるのでしょうか。

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

BBB.sh で、CCC.pl起動前に echo "Content-Type: text/plain" echo "" とでもして、さらに、CCC.plの起動を perl CCC.pl 2>&1 といった感じで、標準エラー出力もブラウザに返すようにすれば、 CGI経由の起動で具体的に何が起きているのかブラウザで確認できると思います。

MOYAJI
質問者

お礼

回答ありがとうございます 申し訳ありませんが当方シェルについてあまり詳しくなく、アドバイスして頂いたようにシェルを書き直してみたのですがブラウザには何も表示されませんでした。 あとプログラムDDDがエラーになった場合、エラーの実行結果がファイルに吐き出されるだけでもしかしたらperlには特に通知されないかもしれません。(折角アドバイスいただいたのに当方の説明不足で申し訳ございません) また他に方法がありましたらよろしくお願いします。

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.1

エラーとなってしまった実行結果から、原因がつきとめられないのでしょうか? 実行環境がまったく違うので、環境変数の指定方法や、path の内容が気にかかるところです。

MOYAJI
質問者

お礼

回答ありがとうございます プログラムDDDの詳細がわからない状態なのでDDDの実行結果からは原因が突き止められない状態です。 またコンソールからシェル等を起動したときはapacheのユーザ?でログインしたのですがこの場合でも実行環境は異なるのでしょうか?

関連するQ&A

  • フリー配布CGIのファイル名変更

    お世話になります。 メールで受信するフォームでを作っていますが、CGIを自分で組めないため配布CGIを利用させていただいてます。フリー配布CGIなのでカスタマイズ可能なのですが、ファイル名を変更しても機能するのか教えてください。 例えば <AAA>フォルダ  │--bbb.cgi  │--fff.pl  │--ccc.html があります。ccc.htmlを動かすためのbbb.cgiです。 もうひとつCGIを入れたいフォームeee.htmlが有る場合、上記のフォルダとファイルをコピーしてファイル名を変更して利用することはできますか? │ │--<AAA>フォルダ │   │--bbb.cgi │   │--fff.pl │   │--ccc.html | │--<DDD>フォルダ     │--bbb2.cgi     │--fff2.pl     │--eee.html ccc.htmlとeee.htmlのフォームの内容は異なるのですが、ファイル名を気軽に変更したcgiファイルでも大丈夫でしょうか? または、<AAA>にeee.htmlを入れてbbb.cgiを共有させることはできるのでしょうか?(<DDD>フォルダ以下はなしで) プログラムファイルを壊してしまうのが怖くてなかなか実行できないでいるのです。 抽象的な質問ですみませんが、よろしくお願いします。

    • ベストアンサー
    • CGI
  • cshで変数名の入れ子ができない

    こんなことをしたいと考えています。 --------------------- set aaa="bbb" set bbb="ccc" echo $aaa echo $bbb echo $($aaa) --------------------- 期待する実行結果としては、 --------------------- bbb ccc ccc --------------------- という感じです。 エラーになってしまうのですが、何かいい逃げ方はありませんか? cshでなくてshでも構いません。 よろしくお願いします。

  • パールが実行されない!!

    パールを実行させようとしたのですが、以下のような結果がブラウザで返されてしまいます。 Method Not Allowed The requested method POST is not allowed for the URL /aaa/bbb/ccc/ddd.pl. そこで、元々のHTML内のPOSTをGETに変えてみたところ、今度はddd.plを上記から実行するか、保存するかのダイアログが出てきてしまいます。 <FORM method=POST onsubmit="return check()" action="../../cgi-bin/ddd.pl">               ↓ <FORM method=GET onsubmit="return check()" action="../../cgi-bin/ddd.pl"> サーバー側のパールの設定(パールが動作しない等)なのでしょうか?

  • CGIのアクセス制限について

    環境は windowsXPHome SP3 / Apache2.2 / ActivePerl5 / (MySQLを使う予定) です。 htdocs\index.html htdocs\ddd\aaa.cgi htdocs\ddd\bbb.cgi のようなディレクトリ構成で、httpd.confは、htdocs以下を公開する設定になっていて <Directory "D:\Program Files\Apache Software Foundation\Apache2.2\htdocs\ddd"> AddHandler cgi-script .cgi Options +ExecCGI </Directory> を指定しました。 これを自宅サーバーとして公開する場合、外部からはindex.htmlにアクセスできるようにして、 aaa.cgiやbbb.cgiはindex.htmlからリンクやformのactionから呼び出されてからしか実行できない (直接cgiのurlを指定して開けない)ようにするにはどうすればいいでしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • Excel表を集計するプログラム

    A列に複数の項目(重複もあり)があります。B列に数字が入っています。 A列の項目で重複しているものはMergeします。 それと同時にB列に入っていた数字を合計したいと思っています。 [具体例] 処理前  →  処理後 AAA 1     AAA 7 BBB 3     BBB 7 CCC 4     CCC 4 BBB 4     DDD 2 DDD 2 AAA 5 AAA 1 こんな感じの処理をVBAでしたいと思っています。 教えてください。 よろしくお願いいたします。

  • 権限の違うシェルスクリプトの実行

    3つのシェルスクリプトがあります。 ●root権限で実行  aaa.csh ●ユーザ指定権限で実行 bbb.csh ●root権限で実行 ccc.csh この3つのシェルスクリプトはaaa.csh →bbb.csh →ccc.cshの順番でバッチ処理として cronに設定したいのですが、 権限が違うのでroot権限のcrontabとユーザ指定のcrontabに それぞれ設定しなくてはいけません。 あまりスマートではないかと思い、 何かよい方法はないかと質問させて頂きました。 3つのシェルスクリプト1つシェルスクリプトにまとめてroot権限のcrontabに設定してしまう方法とかどうでしょうか? ちなみにスクリプトの処理の内容は単純なファイルコピーなどです。 意味分かりますでしょうか? よろしくお願いします。

  • テキスト処理のシェルプログラム

    UNIXシェルもしくはPerlでテキスト処理のシェルスクリプト を作成したいのですがご教授お願いします 1000行あるテキストファイルを 2行単位で区切り2行単位で横一列へ置換しテキストへ出力したいのですが 例 処理前 aaa bbb ccc ddd eee fff 処理後 aaa,ccc,eee bbb,ddd,fff ご教授よろしくお願いします

  • 正規表現で置換

    正規表現の書き方を忘れてしまったので、教えてくださーい。 $line に以下の1行(改行なし)が入っているとして、 <a href="/aaa.pl">aaa</a><a href="/bbb.pl">bbb</a><a href="/ccc.pl">ccc</a> href="/cgi-bin/... に変換したいのです。 <a href="/cgi-bin/aaa.pl">aaa</a><a href="/cgi-bin/bbb.pl">bbb</a><a href="/cgi-bin/ccc.pl">ccc</a> てなカンジ。 よろしくです。

    • ベストアンサー
    • Perl
  • CSVファイルをperlプログラムで処理する場合

    すみません、度々perl初心者のものです。 CSVファイルを1行ずつ読み込んで処理をしたい場合、 1項目内のデータの中に改行がある場合、 どのような方法で対処出来るでしょうか? 例えば "aaa,bbb,ccc ddd,eee,fff" 上記のようにcccとdddの間に改行が入ってるため 本当は1レコードのはずなのに2レコードとして 処理を行ってしまう。 perlで何かやり方はあるのでしょうか? csvを加工するのもよいのですが、データが多量に あるため、プログラム上でなんとかしたいと思うのですが。。。 すみません、宜しくお願い致します。

    • ベストアンサー
    • Perl
  • CGIへの引数の渡し方

    直接プログラミングと関係あるかは分かりませんが、 Webなどでよく見る送信ボタンなどの、いわゆる"submit"を押したとき、 CGIが呼び出されることがよくあります。 実は今、あるページから項目を入力して送信ボタンを押すという行為を定期的に繰り返しているのですが、それをプログラムで書きたいと思いました。 そこで質問なのですが、"submit"などからCGIを呼び出したとき、CGIはいったいどうやって入力されたデータなどを読み取っているのでしょうか? CGIについての知識はあまりないのですが、引数として渡されるのでしょうか? (http://aaa.bbb/ccc.cgi?name=100 見たいな感じで) ちょっと調べてみたら上のような感じだと書いてあったので、web上のcgiが呼び出されるhtmlのソースを呼んで、Inputのnameがnameだったので、 ?name=abc としたのですが、何も起こりませんでした・・・ その当たりがよく分からないのでどなたか教えていただけると助かります。

    • ベストアンサー
    • CGI