プログラムの同時実行数を制限する方法を教えてください。私は、特定のプログラムは一度に5回しか実行できないということです。ユーザーのプロセス数を制限する方法を知っていますが、PAMを使用してプログラムのプロセス数を制限するにはどうすればよいですか?
答え1
PAM は、ログインとアカウントの変更を承認するために使用されます。特定のプログラムを制限することとはまったく関係ありません。
プログラムの実行回数に制限を適用する唯一の方法は、この制限を適用するラッパーを介してプログラムを呼び出すことです。もちろん、ユーザーは独自のプログラムコピーを持っているので、このラッパーを避けることができます。これを望まない場合は、コンピュータにそのユーザーのアカウントを提供しないでください。
プログラムを単一のインスタンスに制限するには、ファイルに排他的ロックを付与するだけです。 1つのファイルを使用して限られた数のインスタンスを許可する直接的な方法はありませんが、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