データが利用可能になったらすぐに http 経由でデータをダウンロードする必要があるデータ サーバーが多数あります。各サーバーに対して、bash
" while true
" ループを開始し、その中で をwget
実行してサーバーに新しいデータをポーリングします。すべての を開始するために、ループや などのループごとにウィンドウを開始する構成bash
を作成しました。これにより、何が起こっているかを簡単に検査できるという利点が追加されます。tmux
wget
この構成から -service を作成し、これとそのダウンロード クライアントを一度にsupervisor
起動、停止、再起動できるようにしたいと考えています。tmux
しかし、 を終了しても、tmux
の性質上tmux
、bash
とそのwget
は実行され続けます。これを回避して、すべてを終了し、単純な ですべてを再起動する方法はありますかsupvervisorctl tmuxservice restart
?
答え1
のtmux マニュアルページ次のような便利なコマンドがあります:
kill-server tmux サーバーとクライアントを強制終了し、すべてのセッションを破棄します。
kill-session [-t target-session] 指定されたセッションを破棄し、それにリンクされているすべてのウィンドウを閉じ、他のセッションは閉じず、それに接続されているすべてのクライアントを切断します。
list-clients [-t target-session] (別名: lsc) サーバーに接続されているすべてのクライアントを一覧表示します。target-session が指定されている場合は、そのセッションに接続されているクライアントのみを一覧表示します。
list-commands (エイリアス: lscm) tmux でサポートされているすべてのコマンドの構文を一覧表示します。
list-sessions (エイリアス: ls) サーバーによって管理されているすべてのセッションを一覧表示します。
これらのコマンドは、tmuxたとえば次のようになります。
tmux list-commands
セッションを一覧表示できるようになりました。
tmux list-clients
そして、選択したクライアントを正確に終了できるようになりました。
tmux kill-session -t 1
(たとえば、最初のセッションを強制終了する場合)。これを行うと、セッションは単に切り離されるのではなく、強制終了されます。次の例を参照してください。
$ tmux list-session
1: 1 windows (created Sun Jan 26 20:31:16 2014) [271x63] (attached)
4: 1 windows (created Mon Jan 27 22:38:14 2014) [103x28] (attached)
$ tmux list-clients
/dev/pts/6: 1 [271x64 xterm] (utf8)
/dev/pts/7: 4 [103x29 xterm] (utf8)
$ ps ax | grep ssh
1160 ? Ss 0:00 /usr/sbin/sshd -D
1811 ? Ss 0:00 ssh-agent
10733 pts/0 S+ 0:00 ssh -Y me@sony
11093 pts/13 S+ 0:00 grep --color=auto ssh
$ tmux kill-session -t 1
$ ps ax | grep ssh
1160 ? Ss 0:00 /usr/sbin/sshd -D
1811 ? Ss 0:00 ssh-agent
12043 pts/13 S+ 0:00 grep --color=auto ssh
ご覧の通り、私は活発に活動していましたsshと呼ばれるPCへの接続ソニー、tmux のセッション 1 で。それを強制終了すると、接続が消えました。
これらのコマンドはこのように役立つと思います。