将特定流程限制为每个用户一个

将特定流程限制为每个用户一个

我的脚本使用 wget 从互联网检索数据。当许多用户使用此脚本时,由于磁盘 I/O,负载会非常高(约 20.00)。Wget 每小时由 cron 自动启动。我想限制一个 wget 在同一时间只对一个客户运行。如何做到这一点?

我正在使用 CentOS 5.7 64 位。

答案1

您可以为脚本添加文件锁。例如使用 flock 命令(Debian 上的 util-linux 包):

$!/bin/sh
(
    flock --nb 200 || echo "waiting for previous script completion"
    flock 200

    # script commands here
    wget ....

) 200>$HOME/.wgetlock

答案2

查看中可用的选项/etc/security/limits.conf。您可以在那里设置每个用户的进程和内存限制。

答案3

如果一遍又一遍地是相同的请求和内容,只需将结果缓存几秒钟并为不同的用户提供相同的内容。

您可以使用 memcache 轻松实现这一点。

如果每个用户的内容不同,请注意,像您要求的那样排队会导致长时间延迟。

相关内容