请帮我找出如何限制程序并发执行的数量。我的意思是,特定程序只能运行,例如一次运行 5 次。我知道如何限制用户的进程数,但如何使用 PAM 为程序做到这一点?
PAM 用于授权登录和帐户修改。它与限制特定程序完全无关。
对程序可以执行的次数应用限制的唯一方法是通过应用此限制的包装器调用它。用户当然可以通过拥有自己的程序副本来绕过这个包装器;如果您不想这样做,请不要在您的计算机上提供这些用户帐户。
要将程序限制为单个实例,您可以使其对文件进行排他锁定。没有直接的方法可以使用文件来允许有限数量的实例,但是您可以使用 5 个文件来允许 5 个实例,并让包装器脚本依次尝试每个文件。创建一个目录/var/lib/myapp/instances
(或您想要放置的任何地方)并在其中创建 5 个文件,所有文件都可读,但只能由 root 用户写入。
umask 022
mkdir /var/lib/myapp
touch /var/lib/myapp/instances/{1,2,3,4,5}
Run Code Online (Sandbox Code Playgroud)
包装脚本(替换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
Run Code Online (Sandbox Code Playgroud)