我的脚本使用 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 轻松实现这一点。
如果每个用户的内容不同,请注意,像您要求的那样排队会导致长时间延迟。