現在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件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
今現在 apache が動いてるアカウントはおそらく login 禁止設定になっています。
たとえばこんなふうに。
www:*:80:80:World Wide Web Owner:/nonexistent:/usr/sbin/nologin
この /usr/sbin/nologin を /bin/csh 等にして コンソールからログインできるようにします。
login したら問題のスクリプトを手動で起動してみてください。
なんらかの結果を得たらまた nologin に戻すのをお忘れなく。
No.4
- 回答日時:
回答ありがとうございます。
その後の調査でプログラムDDDの内部からさらに別のプログラムEEEを起動していて、このEEEの起動がエラーとなっていることがわかりました。
EEEの起動はforkで生成した子プロセス内でexecl関数を使用して実行し、親プロセスでは子プロセスの終了をwait4関数を使用して待っていました。
wait4のstatus値をWEXITSTATUSマクロで確認したところ127が帰ってきており、これをWebで検索したところshを起動できなかった場合にこの値が帰ることがあるという記述をみつけました。
このshを起動できない原因がDIooggooIDさんの仰る環境変数やpathの違いによるものなのかと思っているのですが具体的にどのように対応すればいいのかがわからない状況です。
教えていただいたURLの内容も見てみたのですが当方apache等初心者で具体的にどうすればいいのかがわかりません。
申し訳ありませんが具体的な対応方法があれば教えていただけないでしょうか。
No.3
- 回答日時:
実行ユーザやカレントワーキングディレクトリが違ってくると思われます
パーミッションやパスを確認してみては。
回答ありがとうございます
実行ユーザに関してですがapacheのユーザ?でログインして実行しているのですが、その場合でもCGI経由とそうでない場合でパーミッションやパス等は異なってくるのでしょうか。
No.2
- 回答日時:
BBB.sh で、CCC.pl起動前に
echo "Content-Type: text/plain"
echo ""
とでもして、さらに、CCC.plの起動を
perl CCC.pl 2>&1
といった感じで、標準エラー出力もブラウザに返すようにすれば、
CGI経由の起動で具体的に何が起きているのかブラウザで確認できると思います。
回答ありがとうございます
申し訳ありませんが当方シェルについてあまり詳しくなく、アドバイスして頂いたようにシェルを書き直してみたのですがブラウザには何も表示されませんでした。
あとプログラムDDDがエラーになった場合、エラーの実行結果がファイルに吐き出されるだけでもしかしたらperlには特に通知されないかもしれません。(折角アドバイスいただいたのに当方の説明不足で申し訳ございません)
また他に方法がありましたらよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- C言語・C++・C# 現在プログラムを作っているのですが、実行したときに写真のように結果が表示されるのですが、これを CH 2 2023/01/18 16:22
- システム CPUの問題について 2 2022/07/09 12:04
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、写真のプログラムをどう直せ 2 2022/07/09 21:13
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- その他(プログラミング・Web制作) どうしてもエラーが解決できません。 1 2022/07/23 04:32
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- IT・エンジニアリング 不具合の現状認識をしないプログラマって信用できる人? できない人? 8 2023/07/28 09:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CGIって何ですか?簡潔に教えて...
-
EXCELファイルに誰がアクセスし...
-
ASPから既存のexcelブックを開...
-
《エクセルVBA》「他の人が該当...
-
カタカナを英語やフランス語に...
-
VBAでサーバーにアクセスするに...
-
ApacheでのCGIについての質問
-
SFTPなどは使わないホームペー...
-
HTML文書の中で環境変数を使う...
-
JAVAで別サーバーのファイルの...
-
URLに~/cgi-bin/~を隠す方法
-
C# ファイル削除のエラーコード
-
VB6 FTPファイルのパーミッショ...
-
500 Internal Server Err で困...
-
perl 矢印演算子 -> の使い方
-
apache で /cgi-bin/にアクセス...
-
.htaccessを2つ以上設置した場合
-
エラーの意味がわかりません
-
FFFTPでアップロードできない?
-
FTPにて553エラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CGIって何ですか?簡潔に教えて...
-
Webからアクセスし、画面のボタ...
-
ログアウト処理でWebブラウザを...
-
ホームページにCGIを設置したの...
-
同じ階層内を意味する「./」を...
-
cgiで呼び出したプログラムを数...
-
Perlプログラム上でアラートを表示
-
IISでエラー、Apachでは動くの...
-
毎日同時刻に、設定しておいた...
-
クライアントの環境変数値を得る。
-
CGIファイルへのブラウザからの...
-
空メールを送信すると、サーバ...
-
Cshellスクリプトで前の命令の...
-
http://www.***.com/***/***.cg...
-
Tomcatについて
-
IIS5.1でCGI Timeoutになる原因...
-
前回はごめんなさい。pythonでc...
-
EXCELファイルに誰がアクセスし...
-
《エクセルVBA》「他の人が該当...
-
URLに~/cgi-bin/~を隠す方法
おすすめ情報