Linux では、同時にオープンすることができるファイルディスクリプタ数が制限されています。
ひとつのプロセス内で多くのファイルオープンをする必要がある場合、この制限に引っかかって、次のようなエラーが起きることがあります。
cannot make pipe for process substitution: Too many open files
これを回避する方法です。
どうすればいいのか?
3つの解決策がある(らしい)
- カーネルヘッダファイル中の
INR_OPEN
の値を書き変えて rebuild する -
ulimit -n
を使って、一時的に制限を変更する -
/etc/security/limits.conf
の設定を書き変え、制限を変更する
カーネルの rebuild は大変なので、1. の手段は却下です。
今回は小さめのシステムであるため、 /etc/security/limits.conf
を書き変える方向で行きます。
/etc/security/limits.conf
を書き変える
このファイルのフォーマットは次のようになっています。
<domain> <type> <item> <value>
次のように追記することで、全ユーザが実行するプロセスごとの最大ファイル数が 2048 とすることができます。
* soft nofile 2048
* hard nofile 2048
PAM認証を通らないとこの設定が適用されない。などなど注意すべきことがありますが、参考記事が詳しいのでそちらを参照してください。