首页 > 解决方案 > cURL 从文件中读取 URL - 进程休眠

问题描述

也许有人知道如何用一些 bash 脚本来解决我的问题。

背景:我有一个包含 30 个 URL(每行一个 URL)的文件(urls.txt),用于在 while 循环中创建 30 个使用 cURL 的并行线程,以同时下载/访问这些 URL(访问 URL 需要 cookie) . 该脚本总共运行了大约 10 秒,并由 cronjob 启动和终止。总共打开了相当多的并行 cURL 进程。这导致了很多睡眠进程的问题。ulimit -u 设置为 47828,ulimit -n 设置为 1024。脚本在 debian 系统上运行。当脚本使用 top -d1 运行并且剩余足够的 RAM 时,我监视了进程/内存。当大约 1000 个进程正在运行时,它几乎有相同数量的休眠进程。

目标:在 30 个 URL 之一中,在特定时间范围内嵌入了 javascript。javascript 读取 cookie,服务器处理数据。我需要非常快地成为第一批找到嵌入脚本的正确 URL 的人之一(仅计算前 20 个用户)。因此在一个循环中并行下载 30 个 URL。

问题: 1) 将 ulimit -n 增加到无限制以避免休眠进程并让它们全部执行是否有帮助?该脚本需要尽可能快地执行,并且休眠进程在这里没有帮助。

2) 目前我正在下载 URL 输出(使用 curl -O -J)。如果我不下载文件,它会阻止睡眠过程吗?curl 进程仍会运行,但不会在服务器上写入文件以避免打开文件限制?我什至不需要下载的文件,因为我只需要使用 cookie 数据访问 30 个 URL。

当前的while循环看起来像这样。

while true: do

nohup cat urls.txt | xargs -P30 -n1 curl -b cookie.txt -O -J > /dev/null 2>&1 &

done

标签: bashloopscurlcookiesdebian

解决方案


推荐阅读