5

Я пытаюсь измерить пропускную способность, потерю пакетов, задержку и джиттер между двумя компьютерами по беспроводному сетевому соединению 802.11s.

Я пытаюсь сделать (мой первый) скрипт bash, который может сделать следующее:

  1. SSH к другому компьютеру и начать регистрацию данных из сервисов (ptpd , tcpdump , iperf).
  2. Запустите те же процессы на моем собственном компьютере и начните регистрировать данные.
  3. Когда передача iperf на мой собственный компьютер завершена, он должен подключиться к удаленному компьютеру по протоколу SSH и завершить работу служб.

Идея заключается в том, что эти три шага выполняются в цикле for, который увеличивает размер пакета, передаваемого iperf для каждой итерации, и регистрирует полученные данные.

Я знаю, как запустить процесс на удаленном компьютере с помощью ssh host@adress process .

Однако я не знаю, как запустить несколько процессов через SSH и выйти из системы, так как процессы завершаются после выхода из системы. Я посмотрел на команды screen и nohup , но не знаю, как использовать их в скрипте.

Заранее спасибо!

РЕДАКТИРОВАТЬ:

Спасибо за всю помощь до сих пор.

У меня теперь нет работы, все было довольно просто, как указывали люди. Итак, теперь я получил: ssh host@adress nohup ./script.sh > /dev/null 2>&1 & в сценарии на моем основном компьютере. Это запускает сценарий на удаленном компьютере, а затем выходит из системы SSH. Следующая проблема заключается в том, как выполнить сценарий на удаленном компьютере как sudo, поскольку это необходимо для tcpdump.

Попытка ssh host@adress **sudo** nohup ./script.sh > /dev/null 2>&1 & не работает.

Есть идеи?

РЕДАКТИРОВАТЬ 2:

Если кто-то застрял с той же проблемой, я нашел руководство, как решить эту проблему:

http://www.pantz.org/software/ssh/using_ssh_and_sudo_instead_of_root_for_remote_commands.html

4 ответа4

7

Используйте screen .

Некоторые полезные ярлыки:

  • Ctrl + A + C: создать новое "окно"
  • Ctrl + A + N: перейти к следующему "окну"
  • Ctrl + A + P: перейти к предыдущему "окну"
  • Ctrl + A + D: отключить сеанс (он продолжает работать)

После отсоединения используйте screen -r для возобновления сеанса. Также есть screen -x если сеанс экрана не был отсоединен, а каким-то другим образом перешел в фоновый режим (или фактически все еще работает на другом терминале).

5

Из --help на nohup

Usage: nohup COMMAND [ARG]...
  or:  nohup OPTION
Run COMMAND, ignoring hangup signals.

Просто добавьте & к вашей команде nohup <whatever you want to run> . Это будет означать, что если вы специально не убьете порожденный процесс nohup , он никогда не исчезнет.

Вы можете полностью пропустить nohup с помощью screen или tmux , который, как я слышал, будет поддерживать выполнение процессов, даже если соединение с удаленным хостом не работает (что является одним из его преимуществ). Хотя я не знаю, как это сделать, поэтому вам нужно будет читать самостоятельно, выполнив man screen/man tmux после его загрузки.

2

Вы можете добавить программу в nohup .

Например, nohup myprogram & . Это запустит программу и отправит весь вывод в файл с именем nohup.out. Он также поймает sigHUP, когда вы выйдете из системы.

Другое решение - запустить screen или tmux

0

Ответ на ваш вопрос. Используйте команды screen или nohup . Что вы не понимаете о том, как их использовать?

Пытаться

ssh host@address nohup command args & . & Ставит оболочку ssh на задний план в локальной системе, что означает, что ssh туннель останется так долго, как сможет. Но команда nohup предотвратит завершение command выполняемой на удаленной системе, если по какой-либо причине локальный процесс ssh завершит работу или потеряет соединение с удаленным хостом.

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