• 締切済み

さくらインターネットのレンタルサーバーのOSはFreeBSDですが、

さくらインターネットのレンタルサーバーのOSはFreeBSDですが、 たとえば、自サイトのCGIの負荷が高くなるとホームページが開かなくなります。 個人のページなので、強制的にプロセスを削除するスクリプトをperlやシェルスクリプトで書きたいのですが、どのように書けばよいでしょうか? topとすると、 PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND 23981 test 1 4 0 16180K 13144K select 0 0:00 0.00% perl5.8. これをスクリプトで削除する方法です。 人間が見ればCOMMANDがperl5.8.となっているので、これがcgiでPIDは23981なので kill -9 23981とすればよいのはわかりますが、 スクリプトで実行する方法が知りたいです。

  • BSD系OS
  • 回答数2
  • ありがとう数23

みんなの回答

回答No.2

> 人間が見ればCOMMANDがperl5.8.となっているので、これがcgiでPIDは23981なので > kill -9 23981とすればよいのはわかりますが、 どうしようもない異常な状態で行うなら仕方ありませんが、そうでないのに kill -9(kill -KILL)は避けた方が良いです。 ゾンビになっても適当に再起動できるコンピュータなら良いですが。 CGIプログラムに非同期終了させる機能を入れてはいかがでしょうか。 例えば、SIGUSR1が送られたら、exit終了する様なシグナル処理を入れておけば、kill -USR1 23981で終了させる事ができます。 > スクリプトで実行する方法が知りたいです。 シェルスクリプトでしょうか、perlスクリプトでしょうか。 使いたいスクリプティング言語の種類が分からないのでなんとも答えにくいですが、大抵の言語に機能は備わっているはずですよ。 シェルスクリプトならkillコマンドを使えば良いでしょうし、perlやC言語などならkill関数を使う事やsystem関数などのコマンドを実行できる関数や機能を使ってkillコマンドを実行するなどの方法で実現できるかと思います。 強制的なプロセスのシグナル停止ではない方法も平行してお調べになってはいかがでしょうか。 ウェブサーバの設定(プロセス数などのリソース調整)で行えた方が良さそうな感じの問題に見えますので。 http://www.drk7.jp/MT/archives/001594.html ※ 高負荷になりすぎないように、起動するCGIプロセス数を制限してしまうのも一手法です。無理にKILLすれば、利用者が送信したデータが消えてしまったりもしますから。(シグナル処理で終了すれば、データを処理してから終了するようにプログラムを書く事もできますが)

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.1

どこかに pid を記録するように cgi を改造したらどう?

関連するQ&A

  • レンタルサーバー会社からのCPU異常警告メールについて

    はじめまして。サーバー関連の質問です。 自作CGIのプログラムに短時間で多数のアクセスがあったのですが、 サイト自体が落ちてしまいました、、、 そしてレンタルサーバー会社から以下のようなメールがきました。 サーバプロセス last pid: 50513; load averages: 58.68, 44.79, 26.47 up 199+20:10:01 21:31:07 530 processes: 53 running, 469 sleeping, 8 zombie Mem: 384M Active, 31M Inact, 72M Wired, 112K Cache, 8344K Buf, 1444K Free Swap: 2048M Total, 307M Used, 1740M Free, 15% Inuse PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND 49712 ****** 2 0 6960K 0K sbwait 0:00 0.00% 0.00% <php-cgi-4.3. 50274 ****** -14 0 6316K 2788K inode 0:00 0.00% 0.00% php-cgi-4.3.6 ・・・・・ 48621 ****** 2 0 6960K 0K sbwait 0:00 0.00% 0.00% <php-cgi-4.3. 50286 ****** -14 0 6092K 2540K inode 0:00 0.00% 0.00% php-cgi-4.3.6 50297 ****** -14 0 6960K 3504K inode 0:00 0.00% 0.00% php-cgi-4.3.6 50247 ****** -14 0 6092K 2544K inode 0:00 0.00% 0.00% php-cgi-4.3.6 50245 ****** -18 0 6284K 2744K RUN 0:00 0.00% 0.00% php-cgi-4.3.6 ----------------------------------------------------- 全部で95プロセスありました。 質問なのですが、このサーバープロセスはどういう状態なのでしょうか? 自作CGIには暴走ロジックはかなり気を付けているのですが、 本当に暴走したのでしょうか? また、どのような事をすれば防げるのでしょうか? サーバー関連はあまり詳しくなく、 これだけではなんとも言えないかもしれませんが、 どうか、ご教授いただければ幸いです。 よろしくお願いいたします。

  • 受信メールをサーバーから削除

    perl で サーバーにある受信メールを削除する スクリプトをご存知でしたら、ご紹介ください。 FreeBSD サーバーをレンタルで使用してます。

  • さくらサーバーに独自ドメインを追加で500エラー

    さくらサーバーに独自ドメインを追加しましたが エラー500が表示され(右記です)The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator at support@sakura.ad.jp to inform them of the time this error occurred, and the actions you performed just before this error. More information about this error may be available in the server error log.また エラーログ上には[Tue Oct 09 10:03:39.034157 2018] [cgi:error] [pid 637⁺] [client 100.64.0.74:2⁺661] AH0281⁺: script not found or unable to stat: /home/++++/www/index.php と記載されています(+で伏せている部分あります。)。自分でいろいろと調べましたが まったくお手上げ状態です。 どなたかご教授いただければ幸いです。当方PC関連初心者で一番最初にドメインを追加した時に作業時間が大変かかった記憶があります…。埒が明かないので、一度追加したドメインを削除しました。再度やり直します。 共感した 0

  • FreeBSDでファイルをゴミ箱に一旦捨てるスクリプト

    今FreeBSDでファイルを削除する際にそのまま消すのではなく一旦 ~/.trash/ というディレクトリに移動させるスクリプトを作っています。 しかし私はスクリプトを作ったことがほとんどないためなかなあうまくいきません。 本を見て #! /bin/sh mv $@ ~/.trash/ という単純なものはできたのですが これだとディレクトリを削除してゴミ箱に送った後同じ名前のファイルを ゴミ箱に送ろうとするとエラーが起きてしまいます。 そこでゴミ箱に送る際ファイル名を 削除するファイル.現在の時刻  にしようと思い #! /bin/sh # move to the trash directory TRASHTIME=`date +"20%y-%m%d-%k%M%S"` mv $@ $@.$TRASHTIME mv $@.$TRASHTIME ~/.trash/ としてみたのですが全然うまくいきませんでした。 どのようにしたらうまくいくでしょうか?

  • Mac OSX のWeb共有でサーバを立ち上げたいのだが、立ち上がらない...

    Leopardに組まれているApache2.2でサーバを立ち上げる作業をしています。URLに「127.0.0.1/index.html」を入れると、無事、htmlページが表示されます。現時の設定は次のようになっています。  /etc/apache2/users/USERNAME.conf で(USERNAMEは私の名前を使用)、 ・<Directory "/Users/USERNAME/Sites/">---</Directory> 内に  AddHandler cgi-script .cgi 及び Options Includes ExecCGIを追加 ・/usr/local/bin (を作り)perlのhard linkを作成してあります。 CGIファイル(hello!.cgi)も/usr/local/bin においてあります。hard linkの元は /usr/bin/配下にあります) 他方、/etc/apache2/httpd.conf では次の設定になってます: ・ServerName が 127.0.0.1 ・ServerRootが /usr/ (これが誤り?) ・DocumentRoot が /usr/Apache2.2/htdocs (これも変?) ・User 及び Groupはともに www 先達にお願い! 次のことを教えて下さい。 1.その他、設定事項で欠落している事項があるのか? 2.127.0.0.1/index.fileはどのdirectoryにあるか? 3.Terminalで 「cd ~」と入力すると、/Users/USERNAMEとなって上のDocRootと合わないのはなぜか? 4.hello!.cgiを表示するにはURLをどうすればよいか? 宜しくお願いします。

  • CGIモードのphpスクリプトが400で動くわけ

    さくらインターネットのレンタルサーバを利用しています。 さくらに聞け!、と言われてしまうかもしれないですが教えてくれると助かります。 困っているのと技術的な興味の半々です。 私が利用している「プロ」プランの特徴はユーザ権限でapacheが起動されていることです。 (ユーザ毎にapacheが起動されていると考えられます。http://tanaka.sakura.ad.jp/archives/000971.html) PHPはCGIモードで設定されていてPHPスクリプトはパーミッション400で動作します。 同じディレクトリにperlスクリプトもあるのですがこれは少なくとも500を与えないと動作しません。 そこでこの動作条件の違いの原因を考えてみて思いついたのですが、 両者の違いとしてPERLスクリプトの先頭にはperlの位置が明示されているがPHPスクリプトのそれにはない。 それからCGIモードでPERLを動作させる場合とCGIモードでPHPを動作させる場合とではhttpd.confの記述内容が違う。 (ExecCGI, AddHandler, AddType, Actionなど) 質問1 httpd.confに、PHPを設定するようにPERLを設定すれば PERLスクリプトも400で動作するようになるのでしょうか? またその場合先頭行でperlの位置を明示する必要もなくなりますか? (テスト環境がないためテストはしておりません)

    • 締切済み
    • CGI
  • さくらインターネットのレンタルサーバで…

    さくらのレンタルサーバ・スタンダードプランを契約したのですが 追加ドメインがどうすればいいのかわからなくて困っています。 メールで送られてくる一番初めのドメイン名にはFFFTPで設定 してHPを表示できたのですが、新しく他のドメイン名でHPを 表示するにはどうすればいいのでしょう? 新しいドメイン名はサブドメイン1つとさくらから取得した独自ドメイン をコントロールパネルから追加できました。 しかしその次がFFFTPがちょっと良く分からない感じです。 ヘルプも見たのですがいまいちわかりません。 次はどうすればいいのか手順を教えて頂きたいです。 また最初のものとは別に新規ホストをFFFTPで設定しなおさない といけないんですかね? 初心者な物で質問も曖昧な感じですが、かなり困っているのでよろしくお願いします。

  • サブルーチンを認識しません。

    perlプログラムで サブルーチンの中で、別のサブルーチンを呼び出していますが、 なぜか認識しません。 KCatchでは以下の表示をしています。 Catch: Mon Sep 22 07:56:36 2003 ------------------------------------------------- [regist.cgi:375:die] Undefined subroutine &main::lock called. > &lock; ------------------------------------------------- regist.cgi with Perl 5.00502 for freebsd サブルーチン名には頭に & を付けて呼び出しています。 サブルーチンは、スクリプトの最後にまとめてあります。 同じサブルーチンは、他のスクリプトでも利用していますが、 エラーは出ていないのですが。 何が原因か、わかりません。 関係ないかもしれませんが、プログラム最初の方でuse strict;の宣言をしています。 他のサブルーチンも認識しません。 KCacthの表示は同じ &main::サブルーチン名 called になっています。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 無料で著作権削除のできるショッピングカートcgi

    無料で著作権表示を削除できるショッピングカートCGIを探しています。 有料で削除できるものはたくさんあるのですが、無料でできるものは見つけることができませんでした。 改変・改造は自分で行えますので、そのベースにできるようなスクリプトを探しています。 基本的な機能を組み込んであればOKです。 言語はPerlでお願いします。

    • 締切済み
    • CGI
  • さくらインターネットレンタルサーバでのphpについて、教えてください

    phpを勉強して1ヶ月の初心者です。 すでにさくらインターネットレンタルサーバで自分のサイトを運営しており、そこで覚えたphpを早速使用してみようとしたのですが、全く表示されません。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_Jis"> <title></title> </head> <body> <p>今日は、<?php echo date("Y/m/d"); ?> です。</p> </body> </html> たったこれだけのコードなのに、サーバにアップロードしてアクセスしてみると、 「今日は、 です。」 となるだけで全く動いている気配もありません。 htmlの中に埋め込むのをやめてphp単体のみの拡張子を.phpにするとちゃんと動きます。 ネットで検索してみると「さくらインターネットではphpはcgiモードで動いている・・」との情報がありますが、 cgiモードとはつまり、htmlに直接コードを埋め込む事はできないということなのでしょうか。

    • ベストアンサー
    • PHP