タイマーを使用してサーバー上のtmuxプロセスを終了できますか?

タイマーを使用してサーバー上のtmuxプロセスを終了できますか?

tmuxサーバーにインストールして実行していますjupyter。ニューラルネットワークを合わせるには時間がかかりますが、サーバーが公開されているためリソースが不足しています。私のプログラムを実行し、実行するのにかかる時間をおおよその予測し、予想される実行時間を秒単位で使用tmux kill --time 5000して同様のコマンドを作成できるかどうか疑問に思いました。5000これにより、未使用のリソースを借りることができなくなります。

答え1

私はこれを直接見つけました。

プロセスを終了するには、sleep次のコマンドを使用できます。

sleep <time in seconds> && tmux kill-session -t <session name>

または、すべてのセッションを終了する必要がある場合は、tmux単に次のように入力できます。

sleep <time in seconds> && pkill tmux

UPD:またはコメントで推奨されているように、次のものを使用できます。 timeout <time> tmux <command>

答え2

killサーバーは、tmuxtmux 内で実行するプロセスを必ずしも停止するわけではありません。しかし、tmuxその中から始まったすべてのプログラムがもう存在しない場合は、そのプログラムを終了したいようです。

デフォルトでは、tmuxサーバーはそのウィンドウに割り当てられているすべてのプロセスが終了すると終了します。これを使用してremain-on-exitウィンドウを開いたままにしてシャットダウンプロセスの結果を確認できますが、再接続して確認せずにサーバーをシャットダウンしたいようですremain-on-exit。セッションなしでオンになっていますが、あなたはそれを望んでいません。基本的な動作はまさにあなたが望むようです。あなたがすべきことは、ウィンドウに割り当てられたプロセスが終了することを確認することだけです。exit-emptyoff

tmux new-session command1これにより、command1新しく作成されたセッションの単一ウィンドウ内の単一ウィンドウにプロセスが割り当てられます。それからtmux new-window command2待ってくださいtmux split-window command3。 tmuxサーバーはcommand1、、、、command2(および他の場合)終了後に終了し、command3他のセッションはありません。

対話型シェルを使用してセッション/ウィンドウ/ウィンドウを作成する場合、シェルは重要なプロセスです。command4シェルで起動されたプログラムは終了できますが、シェルとtmuxサーバーはそのまま残ります。インタラクティブシェルでtmuxのプログラムを実行するのに慣れていて、この方法を維持したい場合は、不要なときにtmuxがすぐにシャットダウンされるようにするには、各シェルが操作が完了するとすぐに各シェルが終了することを確認する必要があります。終了します。 tmux内のシェルでは、次のことができます。

command4; exit

でも

command4; command5 && command6 | (command7; command8) | command9; exit

これにより、コマンドが終了するとすぐにシェルが終了します。command4電話できる唯一の簡単な場合

exec command4

シェルをに置き換えますcommand4。これからtmuxサーバーにとって重要なのはcommand4これだけです。

どのようにして、すべてのセッションのすべてのウィンドウ内のすべてのウィンドウが最終的に終了することを確認してください。これを正しく実行すると、tmuxサーバーがすべてシャットダウンされ、自動的にシャットダウンされます。

この方法では、何も推定する必要はありません。 tmuxサーバーは必要なだけ実行され、早期にシャットダウンする危険はありません。

繰り返しますが、これはすべて、そのtmuxの端末(ウィンドウ)のすべての出力が消費可能であると仮定します。私はあなたの答えで何も確認せずにセッションまたはtmuxサーバーを終了したいと思いました。

私のソリューションを使用すると、古いタイマーが新しい状況に適していないことを心配することなく、必要に応じて新しいセッション、ウィンドウ、またはペインを作成できます。もはや必要ない場合は、すべてのウィンドウが消えます。すべてのウィンドウ、すべてのセッション、およびtmuxサーバー全体で同じです。

ウィンドウに割り当てられたコマンドの一部が無期限に実行されるようになっている場合(つまり、要求が終了するまで)、このソリューションは実際には機能しません。私はそのようなコマンドに問題がないと思います。しかし、そうであれば、次のようなcommand4こともあることに注意してくださいtimeout 5000 actual_command4

関連情報