У меня есть много серверов данных, с которых мне нужно загружать данные через http, как только они становятся доступны. Для каждого сервера я запускаю bash " while true " -loop и в этом wget опрашиваю сервер на наличие новых данных. Чтобы запустить все bash я создал конфигурацию tmux запускающую окно для каждого цикла, такого как loop и wget . Это добавляет преимущество более легкой проверки того, что происходит.

Я хочу создать supervisor сервис из этого конфига, который позволил бы мне запускать, останавливать и перезапускать этот tmux и его клиенты загрузки одновременно.

Однако, когда я tmux , по самой природе tmux , bash и их wget продолжают работать. Есть ли способ обойти это, поэтому я могу выйти и перезапустить все с помощью простого supvervisorctl tmuxservice restart?

1 ответ1

1

Страница man tmux содержит следующие команды, которые могут оказаться полезными:

kill-server Убить сервер и клиенты tmux и уничтожить все сеансы.

kill-session [-t target-session] Уничтожить данный сеанс, закрыть все связанные с ним окна и никакие другие сеансы и отсоединить все подключенные к нему клиенты.

list-clients [-t target-session] (псевдоним: lsc) Список всех клиентов, подключенных к серверу. Если указан целевой сеанс, перечислите только клиентов, подключенных к этому сеансу.

list-команды (псевдоним: lscm) Список синтаксиса всех команд, поддерживаемых tmux.

list-session (псевдоним: 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 с ПК под названием sony, в сеансе 1 tmux. Когда я убил его, связь исчезла.

Я думаю, что именно так эти команды помогут вам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .