dwt*_*bar 1 ulimit gnu-parallel
我正在运行 GNU 并行,一段时间后我得到:
parallel: Warning: no more file handles Raising ulimit -n or etc/security/limits.conf may help.
Run Code Online (Sandbox Code Playgroud)
为了克服这个问题,应该向并行命令添加什么参数?
我更改limits.conf
为,unlimited
但后来我无法使用sudo
或登录我的盒子,同样的问题root
就像这里ssh
这是我正在使用的代码片段。我有 2 个文件,第一个带有密码,第二个带有主机。
passPasswords_and_hosts() {
`sudo sshpass -p "$1" ssh -o ConnectTimeout=2 root@"$2" -o StrictHostKeyChecking=no "$command_linux"`
}
export -f testone
export -p command_linux
parallel --tag -k passPasswords_and_hosts :::: "$passwords" "$linux_hosts"
Run Code Online (Sandbox Code Playgroud)
为了避免在异常终止(认为或系统崩溃)后留下 tmp 文件kill -9
,GNU Parallel 打开 tmp 文件并立即删除它们。但它使文件保持打开状态。
为了满足它的要求,--keep-order
必须保持所有尚未打印的文件打开。因此,如果您有 1000000 个命令,并且命令 2 永远卡住,那么 GNU Parallel 将愉快地运行命令 3 及更高版本,但如果命令 2 没有解除卡住,那么 GNU Parallel 最终将耗尽文件句柄(它每个命令使用 4 个文件句柄)。工作)。
在你的情况下,你passPasswords_and_hosts
可能会在某个时候陷入困境。在您的输出中,它将是上次输出之后的作业(即尚未打印的作业)。
因此,请尝试手动运行该作业,看看是否存在一些明显的问题。
您也可以删除-k
. 然后,您的卡住作业仍将使用 4 个文件句柄,但所有后续完成的作业将不会使用,因为它们将在完成后打印。
最后就可以使用了--timeout
。我通常使用--timeout 1000%
. 这意味着,如果某个作业花费的时间超过所有成功作业中值运行时间的 10 倍,那么它就会被终止。它适用于各种不同的情况。