![使用 tmux 作為 Supervisorctl 服務來管理多個下載器?](https://rvso.com/image/1395394/%E4%BD%BF%E7%94%A8%20tmux%20%E4%BD%9C%E7%82%BA%20Supervisorctl%20%E6%9C%8D%E5%8B%99%E4%BE%86%E7%AE%A1%E7%90%86%E5%A4%9A%E5%80%8B%E4%B8%8B%E8%BC%89%E5%99%A8%EF%BC%9F.png)
我有很多數據伺服器,我需要在數據可用時立即透過 http 下載數據。對於每個伺服器,我啟動一個bash
“ while true
”循環,並在其中wget
輪詢伺服器以獲取新資料。為了啟動所有的bash
s,我創建了一個tmux
配置,為每個循環(例如循環和 )啟動一個視窗wget
。這增加了更容易檢查正在發生的事情的好處。
我想supervisor
從此配置建立一個服務,這將允許我tmux
立即啟動、停止和重新啟動它及其下載客戶端。
然而,當我退出時tmux
,本質上tmux
,bash
s 和他們的wget
s 繼續運行。有沒有辦法解決這個問題,這樣我就可以透過簡單的操作退出所有內容並重新啟動所有內容supvervisorctl tmuxservice restart
?
答案1
這tmux 手冊頁您可能會發現以下有用的命令:
Kill-server 終止 tmux 伺服器和用戶端並銷毀所有會話。
Kill-session [-t target-session] 銷毀給定的會話,關閉連結到它的所有窗口,但不關閉其他會話,並分離附加到它的所有客戶端。
list-clients [-t target-session](別名:lsc)列出連接到伺服器的所有客戶端。如果指定了目標會話,則僅列出連線到該會話的用戶端。
list-commands(別名:lscm)列出 tmux 支援的所有指令的語法。
list-sessions(別名:ls)列出伺服器管理的所有會話。
您可以在其中使用這些命令多路復用器例如如下:
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連接到名為索尼,在 tmux 的會話 1 中。當我殺死它時,聯繫就消失了。
我認為這就是這些命令對您的幫助。