サーバ間のデータ移行を実行するために私たちの主要なスクリプトの1つにパラレルを実装しました。現在、出力は、実行中のシーケンス(例えば、5/20: $username: rsyncing homedir
または5/20: $username: restoring account
)に応じて実行される機能からのステータスの定期的なエコーとともに、一度にすべての出力(-u)をきれいな色で表示します。これらはすべて、スクリプトを実行している端末に直接エコーされ、そこで蓄積されます。ただし、コマンドが実行されている時間の長さによっては、出力が正常に終了せず、長時間実行されているrsync
コマンドがシャッフル中に失われる可能性があります。 Butm私は、次のプロセスの出力を得るために、長時間実行されているプロセスが終了するのを待っていません。gnuの状態/進捗状況を平行にトラッキングする
要するに、私の問題は、どの引数が処理されていて、まだ実行中であるかを追跡しています。
私がしたいことは、(parallel args command {#} {} ::: $userlist) &
でバックグラウンドに並列して送信し、次にそれぞれの実行中の機能の進捗状況を追跡することです。私の最初の考えはps
とgrep
を自由に使ってtput
と一緒に数秒ごとに画面を書き直すことでした。例えば、私は通常、並列に3つのジョブを実行するので、私は表示する画面を持つようにしたい:
1/20: user1: syncing homedir
current file: /home/user1/www/cache/file12589015.php
12/20: user12: syncing homedir
current file: /home/user12/mail/joe/mailfile
5/20: user5: collecting information
current file:
私は確かに一緒に何ら問題は上記のステータス出力を得ることはできませんが、私の現在のハングアップからの出力を分離しています個々の並列プロセスを3つの異なるパイプに変換しますか?変数?ファイル?上記の情報に解析することができます。
あなたは--linebuffer --tagと--tmuxを認識していますか? –
--tagは、出力をパイプして定期的に分析できるようにするためのアイデアを持っている人には便利です(現行の出力には、すべての引数が既にきちんとフォーマットされていることが示されています)。--line-bufferと--tmuxは役に立ちませんこの場合。私は特に出力から重複する行については心配していません(これはまれです)。実行中のプロセスではなく、tmuxからの情報のスクレイピングは余計なステップのようです(マシンにデフォルトでtmuxがインストールされていません)。 – Andrej