バックグラウンドでコマンドを実行し、同時に出力を記録する方法

バックグラウンドでコマンドを実行し、同時に出力を記録する方法

バックグラウンドでいくつかのコマンドを実行し、同時に出力を見て、正しく実行されていることを確認したいと思います。

wp-cliいくつかのタスクを実行し、出力を保存するために使用します。

答え1

「出力をテキストファイルとして保存したい」と「出力を見たい」を正しく理解すると答えここ役に立つでしょう。

「このteeコマンドは標準入力を標準出力にコピーします。そして引数として提供されたすべてのファイルでも機能します。これは、パイプを介して一部のデータを転送するだけでなく、コピーを保存したい場合にも役立ちます。 」

ここから詳細を読むこともできます。
https://www.gnu.org/software/coreutils/manual/html_node/tee-inspirion.html

gustafbstromを使用した簡単な例:
program [arguments...] 2>&1 | tee outfile

したがって、コマンドの出力をファイルとして保存しながら画面に表示できます。

答え2

「バックグラウンドで実行」と「出力を見たい」という2つの質問を混同しています。

一歩退いて問題についてもっと考えなければなりません。あなたが本当に欲しいものは何ですか?

私が収集したところによると、あなたは本当に「バックグラウンドで実行」したいと思います。

両方の目標を達成できますが、どちらかが優先順位を持ち、主な目標になるはずです。ここで他の解決策が通知されます。

「プログラムの出力を見ること」はかなりマイナーな問題ですtee

前述したように、まず「コンテキスト」に集中することをお勧めします。

最初の事実:Unixには「コンテキスト」がないことに気づくべきです!

デーモンプロセスという概念があります。その後、「デーモン」ハックがありますが、どちらも「背景」を意味しません。

悪魔化の概念は今日でも有効ですが、「デーモン化」の概念はそうではありません! 2022年の今日、私たちは遅い「デーモン」を窓の外にエクスポートするためのすべてのツールを備えています。

デーモンは愚かです。これはBSDによって導入されたバグであり、まったく発生してはならず、何十年も初心者を混乱させました。

一方、デーモンはシングルユーザーioを処理するだけでなく、シングルユーザー処理とユーザーセッションバインド(制限された)時間枠に限定されないプロセスにすぎません。デーモンは無期限に実行され、しばしば(常にではありませんが)マルチユーザーIOを処理し、どのユーザーセッションにも接続されません。しかし、「前景」/「背景」はもはや重要ではない。

したがって、元の説明に戻り、Unixには「コンテキスト」はなく、2つの可能性しかありません。プロセスの出力と入力は、現在(ユーザー)端末に接続するか、他の場所に接続します。

現在の端末に接続されているプロセス(「フロントエンド」)が、これはフロントエンドにすぎず、Benには他のフロントエンドがあり、Caseyも同様であることを忘れないでください。したがって、切断可能な端末に接続されていないすべての項目は「バックグラウンドで」実行されます。

この質問を理解して混同しないことを願っています。そうでない場合は、理解するまで上記の段落をもう一度お読みください。

したがって、「バックグラウンド」の場合は、実行中のwp-cliインスタンスが一時端末に接続されていないことを確認するだけです。

端末エミュレータ端末、VTログイン端末、SSHログイン端末は一時的です。つまり、接続を切断できません。したがって、あなたがしなければならないことは、wp-cli一時ではなく端末、つまり自動的に切断されない端末に「バインド」することだけです。最も実行しやすいのはtmuxとですscreen

したがって、サーバーにログインし、新しいtmuxセッションを開始してからwp-cliそこに移動します。 SSHセッションが失敗しても(ネットワークの問題)、SSH端末(ネットワークが失敗したときに破壊される)ではなくwp-cli「内部」端末に接続されているため、操作はまだ影響を受けません。tmuxこれにより、効果的に「コンテキスト」を達成できます。

これで出力をアーカイブしたい場合以外は必要ありません。tmux生成されたすべての行を逆方向にスクロールできるスクロール機能があるためですwp-cli(もちろん、tmuxは記録された行数を制限します)。

出力をアーカイブするには、wp-cli | tee wp-cli.logセッション内で簡単に設定すると、tmux出力を同時に「監視および記録」できます。

screen似ていますtmuxが、年齢も多く、精神遅滞も多いので、ぜひご覧くださいtmux。一方、screenより多くのシステムに存在します(さまざまな破壊段階)。選択はあなたのものです。

tmuxは、ユーザーが要求したように「バックグラウンドで」長い一時タスクを実行するための素晴らしい「プラットフォーム」です。

残念ながら、tmux一時的/手動(たとえば、サーバーが再起動されるたびにtmuxセッションをリセットし、そこからコマンドを開始する必要がある)などのスクリプトを「デーモン」に変換したいのですが、これはこの回答を超えています。 。

関連情報