パラレル:警告:ファイルハンドルはもうありません。

パラレル:警告:ファイルハンドルはもうありません。

私はGNUパラレルを実行しており、しばらくすると次のような結果が得られます。

parallel: Warning: no more file handles Raising ulimit -n or etc/security/limits.conf may help.

この問題を克服するには、並列コマンドにどのパラメータを追加する必要がありますか?

limits.confに変更しましたが、ボックスを使用またはログインunlimitedできません。同じ問題が発生しました。例:sudorootsshここ

以下は私が使用しているコードの一部です。 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 -9GNU Parallelはtmpファイルを開いてすぐに削除します。しかし、ファイルは開いたままです。

要件を満たすには、まだ--keep-order印刷されていないすべてのファイルを開いておく必要があります。したがって、1000000個のコマンドがあり、コマンド2が永久に中断されると、GNU Parallelはコマンド3以上を問題なく実行しますが、コマンド2が中断されない場合、GNU Parallelは最終的にファイルハンドルが不足します(各コマンドは4つのファイルを使用します)。ハンドル)。働く)。

あなたの場合は、passPasswords_and_hostsおそらくある時点で目詰まりします。出力は、最後の出力以降のジョブ(つまり、まだ印刷されていないジョブ)になります。

したがって、タスクを手動で実行して、いくつかの明らかな問題があるかどうかを確認してください。

を削除することもできます-k。これにより、中断されたジョブは引き続き4つのファイルハンドルを使用しますが、その後に完了したすべてのジョブは完了後に印刷されるため、使用しません。

いよいよ使用準備が整いました--timeout。私は通常を使用します--timeout 1000%。これは、操作が10倍以上長くかかる場合を意味します。中央値成功したすべてのジョブが終了する前のランタイムです。さまざまな状況で動作します。

関連情報