![Использовать tmux для управления несколькими загрузчиками в качестве службы supervisorctl?](https://rvso.com/image/1395394/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20tmux%20%D0%B4%D0%BB%D1%8F%20%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D0%BC%D0%B8%20%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D1%87%D0%B8%D0%BA%D0%B0%D0%BC%D0%B8%20%D0%B2%20%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B5%20%D1%81%D0%BB%D1%83%D0%B6%D0%B1%D1%8B%20supervisorctl%3F.png)
У меня много серверов данных, с которых мне нужно загружать данные через http, как только они становятся доступны. Для каждого сервера я запускаю bash
" while true
"-цикл и внутри него wget
опрашиваю сервер на наличие новых данных. Чтобы запустить все bash
s, я создал tmux
конфигурацию, запускающую окно для каждого цикла, такого как цикл и wget
. Это добавляет преимущество более легкой проверки того, что происходит.
Я хочу создать supervisor
службу из этой конфигурации, которая позволит мне запускать, останавливать и перезапускать ее tmux
и ее загружающие клиенты одновременно.
Однако, когда я выхожу tmux
, по самой природе tmux
, bash
s и их wget
s продолжают работать. Есть ли способ обойти это, так что я могу выйти из всего и перезапустить все с помощью простого supvervisorctl tmuxservice restart
?
решение1
Theстраница руководства 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
Как вы видите, у меня был активныйсшподключение к ПК называетсясони, в сеансе 1 tmux. Когда я его убил, соединение исчезло.
Я думаю, что именно так эти команды вам помогут.