프로그램의 동시 실행 수를 제한하는 방법을 알려주세요. 내 말은 특정 프로그램은 한 번에 5번만 실행할 수 있다는 것입니다. 사용자의 프로세스 수를 제한하는 방법을 알고 있지만 PAM을 사용하여 프로그램의 프로세스 수를 제한하려면 어떻게 해야 합니까?
답변1
PAM은 로그인 및 계정 수정을 승인하는 데 사용됩니다. 특정 프로그램을 제한하는 것과는 전혀 관련이 없습니다.
프로그램 실행 횟수에 제한을 적용하는 유일한 방법은 이 제한을 적용하는 래퍼를 통해 프로그램을 호출하는 것입니다. 물론 사용자는 자신만의 프로그램 복사본을 가지고 이 래퍼를 피할 수 있습니다. 이를 원하지 않으면 컴퓨터에 해당 사용자에 대한 계정을 제공하지 마십시오.
프로그램을 단일 인스턴스로 제한하려면 파일에 배타적 잠금을 부여하면 됩니다. 하나의 파일을 사용하여 제한된 수의 인스턴스를 허용하는 직접적인 방법은 없지만 5개의 파일을 사용하여 5개의 인스턴스를 허용하고 래퍼 스크립트가 각 파일을 차례로 시도하도록 할 수 있습니다. 디렉터리 /var/lib/myapp/instances
(또는 원하는 위치)를 만들고 그 안에 5개의 파일을 만듭니다. 모두 읽을 수 있지만 루트만 쓸 수 있습니다.
umask 022
mkdir /var/lib/myapp
touch /var/lib/myapp/instances/{1,2,3,4,5}
래퍼 스크립트( myapp.original
원본 실행 파일의 경로로 대체), Linux 사용flock
유용:
#!/bin/sh
for instance in /var/lib/myapp/instances/*; do
flock -w 0 -E 128 "$instance" myapp.original "$@"
ret=$?
if [ "$ret" -ne 128 ]; then exit "$ret"; fi
done
echo >&2 "Maximum number of instances of myapp reached."
exit 128