並行性の制限により特定のプロジェクトを調べることはできませんか?

並行性の制限により特定のプロジェクトを調べることはできませんか?

私のコンピュータには約400個のGitリポジトリがあります。

以下は、状態を包括的に見つけるために使用するスクリプトです。

function Check() 
{
    gitFolder="$1"
    parent=$(dirname $gitFolder);
    Status=$(git -C $parent status)
    if [[ $Status == *Changes* ]] || [[ $Status == *Untracked* ]]; then
        Info $parent;
        git -C $parent status --porcelain
        if [ -d /Policies ]; then
            /Policies/Run.sh $parent
            /Policies/Git/Run.py $parent
        fi
        Divide
    elif [[ $Status == *ahead* ]]; then
        Warning "Push $parent";
        Divide
    elif [[ $Status == *diverged* ]]; then
        Warning "Sync $parent";
        Divide
    fi
}
export -f Check
FindGits | parallel -j0 Check

FindGitsその他のInfo機能は記号を通して取得されます. ScriptPath

ただし、実行すると、次のメッセージが表示されます。

並列性:警告:252のジョブを並列に実行するのに十分なファイルハンドルがありません。
パラレル:警告: 'parallel -j0 -N 252 --pipe Parallel -j0'を実行してみてください。
パラレル:警告:または「ulimit -n」を増やしてください(試行:ulimit -n ulimit -Hn)。
パラレル:警告:または '/ etc'に 'nofile'を増やしてください。 /security/limits.conf
パラレル: 警告: または /proc/sys/fs/file-max 増加

この400個のgitリポジトリをすべてチェックすると、parallelこのメッセージは気になりません。

ただし、これが252個のリポジトリのみを確認し、残りは残すことを意味する場合は、制限を変更する必要があります(制限を変更せずにparallel252個のリポジトリブロック内のリポジトリを確認するようにしたいが)。

どんなシナリオが起こるのかよくわかりません。このメッセージの意味を明確に説明していただきありがとうございます。

ベストアンサー1

これは警告です。エラーではありません。

400個のリポジトリをすべてスキャンしますが、特定の時間に252個のスキャンのみが並列に実行されます。

したがって、警告を無視してもかまいません。

その理由は、ファイルハンドルの基本的な制限が現代の標準(1024)に比べてとんでもなく低いためです。増やす理由がないようです。。次の方法でこれを実行できます。

ulimit -n `ulimit -Hn`

メッセージを読むだけでその意味を理解できるように、メッセージをどのように表現するかを説明してください。

おすすめ記事