私は24のコアを持つ古いMacを持っており、何百/何千ものシングルコアの作業を自動化したいと思います。バックグラウンドでプロセスを実行するbashスクリプトを作成しましたが、同時に多くのプロセスを設定すると、コンピュータがフリーズします(明らかに300台は大丈夫で、400台は多すぎます...)。
理想的に私がやりたいことは24日を実行し、1つが完了したら25日を実行し、次のタスクが完了したら26日を実行することです。残念ながら、各ジョブには異なる可変ランタイムが必要な場合があるため、時間差を付けて実行するタイミングを設定することはできません。
「wait」を含む項目を見たことがありますが、24を送信してからwaitコマンドで976を送信する場合は、目的の動作が提供されるのか、それとも最初のコマンドの後に表示されるのかわかりません。 Run 976 24 続行完了?
編集:ありがとう。重複する可能性が高いですが、質問に対する回答は並列性を指すだけなので、ここでxargsを使用してこれを行う方法を探索することはできますか?
その理由は、問題のMacが現在別の大陸にあり、今後数日以内にこれらすべてのタスクを実行するにはMacが必須であるためです。何かをインストールしながらコンピュータを台無しにする可能性が常にあるので、そうしません。今すぐ実行するために並列にインストールしたくないし、実際にインストールすることはできません。しかし、bashにはxargsがあるので、それを使ってナビゲートしています。
これまで、xargsと並列処理を満たすためにbashスクリプトを書き換えて、さまざまな入力で実行できます。今私が持っているのは、フォルダ内のすべてのファイルに対してタスクを実行するbashスクリプトです。私が現在試したこと:
ls -d myfolder/* | ls -d myfolder/* | xargs -P 2 -L 1 ~/bin/myscript.sh
しかし、私はまだ同時に実行されているようで、私が間違っているかどうかはわかりません。 (ここでは最大2つを使用しているので、ずっと調べてテストできます!フォルダに4つだけ入れました。誤って何百もの送信したくありません。)
最終編集:ああ! ! !私が何を間違えたのかを知ったのは、しばらくしてからのことでした。 xargsはおそらく私の実行中です。スクリプト並列ですが、実行するスクリプトを書いたプログラムではありません。パラメーター=値のペアが必要なパラメーターのリストにファイル名を挿入する方法がわからないため、スクリプトを作成しました。最後に、xargsで-Iフラグを使用してこれを行う方法を見つけました。これがついに効果がありました:
ls -d myfolder/* | xargs -I foo -P 2 -L 1 myprogram arg1 arg2 arg3=foo arg4
(私の考えには-Iと-L 1が重複していますが動作しますので触れません...)
ここで、myprogramのパラメータリストのfooは各ファイル名に置き換えられます。見つけるのに長い時間がかかる理由の1つは、-Iを含むほとんどのディレクティブが{}を置き換える要素として使用することです。だから私はそれを動作させることができませんでしたが、fooではうまく動作すると思いました。
答え1
答え2
最近同様の問題が発生しました。私が知っている限り、2つのオプションがあります。
そして
たとえば、find
コマンドで見つかったすべてのflacファイルをoggに変換するには、次のようにします。
find -name "*.flac" -print0 | xargs -0 -P 24 -L 1 oggenc
コマンドラインを使用して-P 24
一度に複数のプロセスを実行します。この内容を使用して、ニーズに合わせてカスタマイズできると確信しています。しかし、あなたの質問の詳細が必要です。-L 1
find