![限制程序执行次数](https://linux22.com/image/103196/%E9%99%90%E5%88%B6%E7%A8%8B%E5%BA%8F%E6%89%A7%E8%A1%8C%E6%AC%A1%E6%95%B0.png)
请帮我找出如何限制程序并发执行的数量。我的意思是,特定程序只能运行,例如一次运行 5 次。我知道如何限制用户的进程数,但是如何使用 PAM 来限制程序的进程数?
答案1
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}
包装脚本(替换myapp.original
为原始可执行文件的路径),使用 Linuxflock
公用事业:
#!/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