私は10以上の異なるディレクトリで10以上の異なるコマンドを実行しており、すべてを追跡するにはより良いプロセスが必要です。
私は多くのデバッグを行い、複数の問題を同時に解決する必要があることがよくあります。実行に30〜240分かかるスクリプトがたくさんあります。たとえば、次のようになります。
- ワークスペースの作成
- コードのコンパイル
- コードを実行して、デバッグ情報で問題を再現します。
- 運営資格
私は次の質問を投げています。
- 何が実行されていますか?
- なぜ実行されていますか?スクリプトの作成を始めたら、何を達成したいですか?
- 実行はいつ完了しますか?終了コード(成功/失敗)とは何ですか?
現在、私は各ディレクトリで実行されているタスクをテキストファイルに書き込んで、端末またはログファイルを手動で確認して、すべてのタスクの実行状態を確認します。もっと良い方法があるはずです。
答え1
あるタスクから別のタスクに移動するときに現在実行中のタスクを追跡するのが難しいという問題がある場合は、次のようなものを使用することを検討してください。マルチプレクサそして/または画面。これは、端末を設定して名前を付けることができる仮想端末ウィンドウサーバーです。これにより、端末にいくつかのコンテキストを追加し、デスクトップを乱すことなく複数の端末を実行し続けることができます。
私は主にスクリーンを使用しているので、ワークフローに慣れていますが、通常は次のようにスクリーンセッションを設定します。
screen -S appX
次に、次のように接続します。
screen -r appX
その後、appXスペース内でappX関連の操作用にさまざまなタブ/ウィンドウを設定できます。 「Compile」というウィンドウが1つあり、もう1つは、アプリケーションのログファイルを追跡する「Logs」です。その後、Ctrl+A+キーの組み合わせを使用して、Ctrl+Aあるタブ/ウィンドウから別のタブ/ウィンドウに移動できます。あるいは、一方が端末の上半分の部分にあり、もう一方が下半分の部分にあるように端末を分割することもできます。
答え2
同様のコマンドを複数回実行する場合は、同様のセクションをシェルスクリプトまたは makefile に入れます。スクリプトまたはターゲットに意味のある名前を指定してください。これにより、各端末が何をしているかを見るときに、コマンドライン(そしてホスト名と現在のディレクトリも利用可能)で知っておくべきことをすべて明確にします。
$PROMPT_COMMAND
現在のディレクトリを表示し、(bash)または(zsh)でpreexec
コマンドを実行するように端末のタイトルを設定します。これにより、ウィンドウに切り替えることなくウィンドウリストで直接何が起こっているかを確認できます。コマンドが終了したら、タイトルを現在のディレクトリに設定し、最後のコマンドの終了ステータス($?
)を設定します。
出力を生成するすべてのコマンドを記録し、ログに成功または失敗のマークが含まれていることを確認してください(または自然に発生しない場合はマークで終わります)echo $?
。このロギングはラッパースクリプトに含める必要があります(上記を参照)。これにより、以前に何が起こったかを振り返ることができます。役に立つ場合は、開始日と終了日も記録してください。
答え3
質問に直接答えるには:
- 「何を実行していますか?」
ps afux
とpstree
同様のコンテンツを使用して、現在実行中のコンテンツに関する良いアイデアを得ることができます。合理的な方法でスクリプト名を指定すると、スクリプトの概要を簡単に取得できます。あなたもできます端末ウィンドウの命名使用printf "\033]0;Window title\007"
- 「実行中の理由は何ですか?スクリプトを起動したときに何をしたいのですか?」作業中の問題に応じて、名前付きログファイルにコマンド出力をリダイレクトできます。
tee
実行中に表示するには、[有効]を選択できます。 - 「何がいつ実行されたのですか?終了コード(通過/失敗)は何ですか?」ジョブの終了時に出力を同じファイルに書き込むと(またはそれをスクリプトの標準部分にする方が
time
良いecho $?
)、最後に何が起こったのかについての良いアイデアが得られます。
答え4
ジョブスプーラLinux用の一般的なジョブ管理システムです。
1 つ以上のキューを使用してコマンドを実行できます。新しいコマンドは、前のコマンドが完了したかどうかによって異なります。タグを使用して、ジョブ内のメタ情報を追跡できます。ジョブスプーラには、完了したジョブに関する電子メール通知もあります。実行中のコマンドと完了したコマンドの両方を表示できます。