アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在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を実行するのと直接実行するのとでどういう違いがあるかアドバイスをお願いします。
原因が全く分からない状態で手詰まり状態なので手がかりになることでしたらなんでもアドバイス願います。

A 回答 (5件)

今現在 apache が動いてるアカウントはおそらく login 禁止設定になっています。


たとえばこんなふうに。

www:*:80:80:World Wide Web Owner:/nonexistent:/usr/sbin/nologin
この /usr/sbin/nologin を /bin/csh 等にして コンソールからログインできるようにします。
login したら問題のスクリプトを手動で起動してみてください。
なんらかの結果を得たらまた nologin に戻すのをお忘れなく。
    • good
    • 0

こちらを、ご一読してみてください。



http://httpd.apache.org/docs/2.0/ja/env.html
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/08 14:41

実行ユーザやカレントワーキングディレクトリが違ってくると思われます


パーミッションやパスを確認してみては。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/07 16:13

BBB.sh で、CCC.pl起動前に


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

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

お礼日時:2008/10/07 15:59

エラーとなってしまった実行結果から、原因がつきとめられないのでしょうか?




実行環境がまったく違うので、環境変数の指定方法や、path の内容が気にかかるところです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/07 15:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!