ignore_user_abort()関数を使用してバックグラウンドで実行されるスクリプトを作成しました。しかし、私はスクリプトを停止させるためのコードを挿入しないように十分に愚かで、今は30秒ごとに電子メールを送信しています...バックグラウンドphpスクリプト(共有ホスティング)
スクリプトを停止する方法はありますか?私は共有ホスティングにいるので、コマンドプロンプトへのアクセス権がなく、私はPIDを知らない。
ignore_user_abort()関数を使用してバックグラウンドで実行されるスクリプトを作成しました。しかし、私はスクリプトを停止させるためのコードを挿入しないように十分に愚かで、今は30秒ごとに電子メールを送信しています...バックグラウンドphpスクリプト(共有ホスティング)
スクリプトを停止する方法はありますか?私は共有ホスティングにいるので、コマンドプロンプトへのアクセス権がなく、私はPIDを知らない。
どのようにスクリプトを導入しましたか?確かにそれを取り除くことができます(それが受け入れられるオプションの場合)。それ以外の場合は変更して、サーバー時間に基づいてn分/時間/日ごとに1回だけメールを送信できるようにするロジックを挿入しますか?
re。スクリプトが実行されなくなった場合(または実行しようとしているシステム)、実行のスケジュールをどのようにしましたか?それはcrontabまたは何かにguiのいくつかのタイプですか?あなたはあなたがそこでやったことを元に戻すことはできません(コマンドライン/端末へのアクセス権がないので見てください)?
奪うganly
は、スクリプトを停止する方法はありますか?私は共有ホスティングにいるので、コマンドプロンプトへのアクセス権がなく、私はPIDを知らない。
次に、
しかし、シェルにアクセスできませんか? PHP経由でさえ?そうした場合、あなたは....
<?php
print `ps -ef | grep php`;
を試みることができる...そしてあなたがその、その後のプロセスを識別することができるかどうか....
<?php
$pid=12345; // for example.
print `kill -9 $pid`;
をそして、あなたが持っていない場合でも、アクセスは、シェルコマンドを実行するために、あなたは....単に
<?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";
}
}
(Linuxシステム上の)/ procの中のpidを見つけ、POSIX拡張を使用して、それを終了させることができるかもしれません。 サポートに電話をかけ、キャンセルします。 次回は、制御できないものは実行しないでください。
私はこのスレッドに来ました昨日!私は間違って訪問しなければならないページに無限ループを持ち、I/O to 100
とCPU usage to 100
I/O
があったため、php errors
のためにlogged
となっていました。
上記のトリックは私のshared hosting
では機能しませんでした。 cPanelので
MY SOLUTION
、(現在のことを除いて)PHPバージョンに行く
は、当分の間、任意のPHPのバージョンを選択します。
そして次にApply Changes
。ITが
を働いWHY
理由は、いくつかのPHPのエラーで無限ループを持っていたスクリプトは、PHPのバージョンは、PHPとApacheのようなサービスの再起動を強化変えるので、私はそれを殺すために必要なプロセスでした再起動には以前のプロセスが停止していたので、I/O
とCPU
の使用法が安定していました。また、PHPのバージョンを手で変更する前にそのバグを修正しました:)
あなたはちょうど私の日を救った..ありがとう男 –
あなたはSSHアクセス権を持っていますか? –
'/ bin/ps'を実行して問題のプロセスのPIDを見つけ、' 'posix_kill'(http://ca.php.net/manual/en/function.posix-kill.php)するには' system'を使います)それを殺すために。あなたの共有ホスティングプロバイダには、プロセス管理ツールを備えたコントロールパネルがあるかもしれません。 –
これが特別なイベントの場合は、サポートに電話するだけです... – Olaf