私はGNUパラレルを実行しており、しばらくすると次のような結果が得られます。
parallel: Warning: no more file handles Raising ulimit -n or etc/security/limits.conf may help.
この問題を克服するには、並列コマンドにどのパラメータを追加する必要がありますか?
limits.conf
に変更しましたが、ボックスを使用またはログインunlimited
できません。同じ問題が発生しました。例:sudo
root
ssh
ここ
以下は私が使用しているコードの一部です。 2つのファイルがあります。最初のファイルはパスワードで、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"
答え1
異常終了(考えやシステムの競合)後に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倍以上長くかかる場合を意味します。中央値成功したすべてのジョブが終了する前のランタイムです。さまざまな状況で動作します。