8

ignore_user_abort()関数を使用して、バックグラウンドで実行されるスクリプトを作成しました。しかし、私はスクリプトを停止させるためのコードを挿入しないほど愚かで、今では30秒ごとに電子メールを送信しています...

スクリプトを停止する方法はありますか?私は共有ホスティングを利用しているため、コマンドプロンプトにアクセスできず、PIDもわかりません。

4

4 に答える 4

9

スクリプトを停止する方法はありますか? 共有ホスティングを使用しているため、コマンド プロンプトにアクセスできず、PID もわかりません。

それからいいえ。

しかし、シェルへのアクセス権がないと確信していますか? PHP経由でも?もしそうなら、あなたは試すことができます....

<?php

print `ps -ef | grep php`;

...そして、そこからプロセスを特定できれば....

<?php

$pid=12345; // for example.
print `kill -9 $pid`;

また、シェル コマンドを実行するアクセス権がない場合でも、/proc (Linux システムの場合) で pid を見つけ、POSIX 拡張機能を使用してそれを終了できる場合があります....

<?php

$ps=glob('/proc/[0-9]*');
foreach ($ps as $p) {
    if (is_dir($p) && is_writeable($p)) {
        print "proc= " . basename($p);
        $cmd=file_get_contents($p . '/cmdline');
        print " / " . file_get_contents($p . '/cmdline');
        if (preg_match('/(php).*(myscript.php)/',$cmd)) {
            posix_kill(basename($p), SIGKILL);
            print " xxxxx....";
            break;
        }
        print "\n";
    }  
}
于 2011-09-05T08:54:47.323 に答える
7

昨日このスレに来ました!私は誤って、訪問するはずのないページに無限ループがあり、それが原因で増加し、I/O to 100ログファイルCPU usage to 100 I/Oのサイズが誰も考えられないほど増加していました。php errorslogged

上記のトリックはどれも私のshared hosting.

私の解決策

  1. cPanelで、PHPバージョンに移動します(現在のものを除く)

  2. 当面は任意の PHP バージョンを選択します。

  3. そしてApply Changes

効果があった理由

いくつかのphpエラーを伴う無限ループを持っていたスクリプトはプロセスだったので、私はそれを殺す必要がありました.phpバージョンを変更すると、phpやApacheなどのサービスの再起動が強化され、再起動が含まれていたため、以前のプロセスが強制終了されI/OCPU使用方法としてリラックスしました安定した。また、phpバージョンを手動で変更する前に、そのバグを修正しました:)

于 2015-04-05T07:54:45.473 に答える
0

どのようにスクリプトを展開しましたか? 確かにそれを削除できます(それが許容できるオプションである場合)。それ以外の場合は、サーバー時間に基づいてn分/時間/日ごとに1回だけメールを送信できるように、変更してロジックを挿入しますか?

再。スクリプトの実行を停止する(またはシステムが実行しようとしている)のをどのようにスケジュールして実行しましたか?それはcrontabまたは何かへのある種のGUIですか?そこで行ったことを元に戻すことはできませんか(コマンドライン/ターミナルにアクセスできないため)?

ロブ・ガンリー

于 2011-09-05T07:54:09.830 に答える
0

単純に。サポートに電話してキャンセルしてもらいましょう。次回は、自分でコントロールできないことを実行しないでください。

于 2011-09-22T10:03:08.000 に答える