実行中のプロセス数が20を超える場合は、/opt/php56/bin/php-cgiのすべてのインスタンスを終了する方法は?

実行中のプロセス数が20を超える場合は、/opt/php56/bin/php-cgiのすべてのインスタンスを終了する方法は?

私の共有ホスティングプランのプロセス制限は25なので、これが必要です。プロセス制限が25を超えるたびに、私のウェブサイトではエラー500

私が望むのは、 /opt/php56/bin/php-cgi実行中のプロセスの数が20を超える場合は、プロセスのすべてのインスタンスを終了するスクリプトを作成することです。 5分ごとにスクリプトを実行するようにクローンジョブを構築しました。

答え1

小さなシェルスクリプトで:

#!/bin/sh

if [ $(pgrep -cf /opt/php56/bin/php-cgi) -gt 20 ]
then
  pkill -f ./opt/php56/bin/php-cgi
fi

正規表現 -c一致するインスタンスを計算すると言います。-f完全なプロセス名と一致すると言います。 20より大きい場合(必要に応じて数値を調整する)、適切なpkillコマンドを実行してください。

合計プロセス数が20を超えると、そのプロセスを終了します。

if [ $(ps -e -o pid= | wc -l) -gt 20 ]
then
  pkill -f ./opt/php56/bin/php-cgi
fi

このps行は、すべての(-e)プロセスを収集し、フィールドのみを印刷しpid、その列の名前が変更されたヘッダーとして(何も)使用されないことをpid意味します。つまり、「PID」ヘッダーを表示しないことを意味します。次に、結果行からプロセス数を計算します。 (wc -l)。

関連情報