cgiで呼び出したプログラム(延々と実行します)を、
指定した時間後にkillするcgiを作りたいです。

ここでプロセスidはすでにわかっており、
killコマンドは使えます(linuxを自分で立ち上げてるので)
というか、chmod 4755にしておくので
指定する時間はformから受け取るつもりです。
時間は数分、数時間単位、もしくは数日単位です。

あと、formからメールアドレスを受け取って、
プロセスをkillしたあと、その処理結果を受け取ったメールアドレスに送信もしたいです。
メールサーバは立ち上げています。

質問ばかりですいません。
お知恵を拝借させてくださいm(__)m

このQ&Aに関連する最新のQ&A

A 回答 (1件)

数分や数時間ならともかく、数日動きっぱなしなんですか?(^^;


取りあえずですが、こんな感じで出来ると思います。

1.CGIからbackgroundで延々と実行するプログラムを実行。
2.処理結果は逐次、プログラム名+PIDといった感じのデータファイルに書いておく。
3.同時にCGIから計算プログラムをkillするプログラムをbackgroundで起動する。
4.起動パラメータにはsleep時間とkillするPID、メールアドレスを渡す。(shellで書けば簡単ですね)
5.指定時間sleep後、killしたら、該当のデータファイルをメールで送信。

ただサーバーのCPU負荷を考えると、こんなものを大量に起動されたら簡単に落ちちゃうと思いますが…。
    • good
    • 0
この回答へのお礼

ありがとうございました。
なんとか、4まではできました^^
あとは、メール送信のみ!
systemでコマンドを実行させればいいかなと思っています。

あ、ちなみに、同時にこのcgiを実行できなくするつもりです。
どうやればいいんだろう・・・汗
分からなければ、また質問します。
ありがとうございました

お礼日時:2001/12/17 05:05

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

このQ&Aと関連する良く見られている質問

QCGIでinit.dで起動したプロセスをKillしたい

CGIでinit.dで起動したプロセスをKillしたいです。

「/etc/init.d/zeusCheckmain」ファイルででは

su -l user1 -c "/usr/bin/php /var/www/html/fy1/mainProg/Check_Main.php > /dev/null &"

で起動して、CGIでボタンを押したら、「kill -15 xxxx(プロセス番号)」を実行します。
ユーザの権限が異なるので、CGIはapacheユーザとなるため、killできません。

init.dで起動するプロセスを、user1 からapacheにしたのですが、apacheでは起動できませんでした。
(このユーザは使えませんみたいなエラーが出ます。)

この場合は、どのようにすべきか教え頂ければ幸いです。

よろしくお願いします。

Aベストアンサー

案1)特権(root権限)でkillする。root権限をもっている必要がある。
案2)実行ユーザをuser1にしてkillする。user1のユーザ情報を知っている必要がある。
案3)別ユーザでもプロセスをkillできるようにプログラムを変更する。

――などの手が思いつきますが、とりあえずroot権限を持っている人に相談してみては。

Q
の場所は?

CGIでデータを受け渡しするアンケートを作っています。html中に書く<form method=post action="***.cgi">~</form>“~”の場所についてですが質問項目を全て挟まなくてはいけませんか?実は、チェックボックスの「最大2つまで回答可」という部分をJavascriptでチェック個数を超えてチェックした時点でアラートが出るようにしてます。その記述中にすでに<form>~</form>タグを制限をかけたい質問に置いているので、質問全体を<form method=post action="***.cgi">~</form>でくくると入れ子になってしまいます。大丈夫ですか?

Aベストアンサー

<form method=post action="***.cgi" name="form1">~</form>
にする。つまり「最大2つまで回答可」という部分だけをonclickでJavascriptを呼び出したらいいと思います。

Q2つのプロセスを実行するCGI

1つのCGIで2つのプロセスを実行することを考えています。
1つは、数分かかるような処理を行い、もう1つはユーザにその処理が”実行中”であるといったメッセージを表示しようと思っています。
CGIはC&C++で作成しようと考えており、forkして子プロセスで、数分かかる処理を実行し、親プロセスでメッセージ画面表示といった流れを考えています。
で、質問ですが、この場合、メッセージ画面で子プロセスが実行している間、砂時計が表示され続けますが、これを消す方法がありますでしょうか?
また、1つのCGIで、このように2つのプロセスを実行する場合に、何か良い方法はありますでしょうか?

Aベストアンサー

私だったら、親プロセスは子プロセスを起動したらさっさと終了してhttp通信を切断し、その後はブラウザから一定間隔でhttp通信を行うことで、重い処理を行っているプロセスの様子を監視する、と言う方法を取る気がします。その際、java scriptを使うともっとスマートになる可能性があります(Ajaxに近いですね)。

Qiis+cgiでmultipart/form-data送信がうまくいかない

これまでLinux+Perl/CGIで構築していたWEBサーバをIIS+Perl/CGIに移す必要が生じ、新規にIISによるWEBサーバを構築しました。
一気にコンテンツを移動してもハマるだけだと考え、まずは簡単なコードを記述しCGIが動作するかどうかテストしています。
POSTによるinput type=textのデータ表示まではうまく行きましたが、ファイルアップロードのところで詰まりました。

IIS(Windows)によるWEBサーバの構築は初めてで、何が問題なのかサッパリわかりません。
どなたか問題点あるいはどこをチェックすれば良いかご指摘いただけませんでしょうか。

●やった事
PerlにてPOSTを利用しmultipart/form-dataにてファイルをアップロードするシンプルなコードを書き、第一段階としてMIMEエンコードされたものをブラウザ上に表示するしようとしてみた。
コードは最下方の通り。

●症状
送信を実行してもアップロード中のまま(ウィンドウマークが動き続けている)で、IISに設定してある10分程のタイムアウト時間を過ぎて終了してしまう。
TXT、XLS、DOCなどファイル種を変えて試しても全く同じ症状。

●環境:Windows2000ServerSP4 IIS5.0 Perl5.8.8

*******アップロード画面******
<HTML>
<HEAD>
<TITILE>ファイルのアップロード</TITLE>
</HEAD>
<BODY>
<FORM ACTION="/cgi-bin/upload.cgi" ENCTYPE="multipart/form-data" METHOD="POST">
ファイル: <INPUT TYPE="file" NAME="File" SIZE="32"><BR>
<INPUT TYPE="submit" VALUE="送信">
</FORM>
</BODY>
</HTML>
**********ここまで***********
*******CGI*******************
#!/perl/bin/perl
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
print "Content-type: text/html\n";
print "\n";
print "<HTML>\n";
print "<HEAD>\n";
print "<TITLE>test</TITLE>\n";
print "</HEAD>\n";
print "<BODY BGCOLOR=\"#ffffff\">\n";
print "$buffer";
print "</BODY>\n";
print "</HTML>\n";
exit;
********ここまで***********************

これまでLinux+Perl/CGIで構築していたWEBサーバをIIS+Perl/CGIに移す必要が生じ、新規にIISによるWEBサーバを構築しました。
一気にコンテンツを移動してもハマるだけだと考え、まずは簡単なコードを記述しCGIが動作するかどうかテストしています。
POSTによるinput type=textのデータ表示まではうまく行きましたが、ファイルアップロードのところで詰まりました。

IIS(Windows)によるWEBサーバの構築は初めてで、何が問題なのかサッパリわかりません。
どなたか問題点あるいはどこをチェックすれば良い...続きを読む

Aベストアンサー

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});



undef($/); $buffer = <>;

に直してみると、どうでしょうか?

うろ覚えの記憶ですが、 IIS は

Content-Encoding: chunked

で返すので、CONTENT_LENGTH はあてにならなかったと思います。

デコードは、マルチパートも含めて自分でやると面倒なので、 CGI.pm とかがお勧めです。

Qform actionでよそのサーバーのcgiファイルが読込めない。

form actionに外のサーバーのcgiファイルを指定しています。
ドメイン名以下のパスは通っているのですが、ドメイン名が表示されない(読込まれない)。

Not Found
The requested URL /xxx/xxx.cgi was not found on this server.

になってしまいます。
読込み元のHTMLはフレームに分けてありますが、ここも問題があるのでしょうか。
そもそも外のcgiファイルはよみこめないのでしょうか、
それとも他に問題が、あるのでしょうか。
又、パーミッション、セキュリティも問題ありますか。
よろしくお願いします。

Aベストアンサー

>そもそも外のcgiファイルはよみこめないのでしょうか

読み込めます。
詳しくは参考URLにありますが、formタグのactionはURIを指定します。

>Not Found
>The requested URL /xxx/xxx.cgi was not found on this server.

HTTPステータスコードが無いので推測ですが、URIに問題があるのでは?
(Not Foundっていってるし)

>パーミッション

上記のエラーがHTTPステータスコードの404なら、URIの指定に問題がある可能性が高いので、パーミッションに問題があるかどうかは不明です。

>セキュリティも問題ありますか。

実装等が不明なのでなんともですが、別サーバを指定することの問題はcookieくらいかな?

参考URL:http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/interact/forms.html#edef-FORM


このカテゴリの人気Q&Aランキング

おすすめ情報