실행 중인 프로세스 수가 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).

관련 정보