Назад | Перейти на главную страницу

Запуск ssh / netcat в фоновом режиме

Я пытаюсь запустить тест пропускной способности сети между OS X и хостом Linux. Я хотел бы иметь возможность измерить устойчивую пропускную способность от хоста Linux к хосту OS X с течением времени. Я хотел бы обернуть это в один сценарий, чтобы я мог легко запускать его при внесении изменений в сеть.

До сих пор мой подход заключался в том, чтобы запустить netcat на хосте OS X, прослушивающем порт (nc -l -k 20000 > /dev/null). Затем я запускаю netcat на хосте Linux и отправляю данные на хост OS X (ssh <Linux host> 'dd if=/dev/zero | nc <OS X host> 20000 2>&1'). После этого я побегу netstat -i 1 для измерения пропускной способности и регистрации ее в файле.

Все это отлично работает, когда я открываю 3 окна терминала и запускаю эти команды на переднем плане. Однако, когда я пытаюсь запустить любую из команд netcat в фоновом режиме, процесс ssh завершается. Я пробовал использовать & и -f для фонового процесса ssh.

Вот как выглядит полный сценарий:

#!/usr/bin/env bash

set -o errexit

nc -l -k 20000 > /dev/null &
LISTEN_PID=$!

ssh <linux host> 'dd if=/dev/zero | nc <os x host> 20000 2>&1' &
SEND_PID=$!

echo "Listen: ${LISTEN_PID}, Send: ${SEND_PID}"

netstat -i 1

Вероятно, вам просто нужно использовать nohup

http://linux.die.net/man/1/nohup

Вы можете использовать screen -d script.sh чтобы запустить скрипт с screen в автономном режиме.