Запустите фоновый процесс с помощью ssh, запустите экспериментальный скрипт, затем остановите его - PullRequest
0 голосов
/ 29 октября 2018

Я запускаю эксперименты по производительности клиент-сервер на нескольких удаленных машинах. Я пытаюсь написать сценарий для автоматизации экспериментов. Вот как это выглядит (в упрощенном виде) на данный момент.

for t in 0 1 2 3 4 5 6 7 8 9; do
    cmd1="ssh user@${client1} runclient --threads=${t}"
    cmd2="ssh user@${client2} runclient --threads=${t}"
    $cmd1 &
    $cmd2 &
    wait

runclient подключается к серверу, который я запустил вручную. Он отлично работает, но я бы хотел автоматизировать запуск и остановку сервера. Это значит

  1. Запустите сервер в фоновом режиме в начале эксперимента
  2. Запустить все эксперименты
  3. Остановить сервер в конце эксперимента

Я нашел несколько предложений, но я не уверен, какое из них мне подходит. Некоторые рекомендуют nohup , но я не уверен, как его использовать, и я не понимаю, почему я должен перенаправлять stdin, stdout и stderr. Существует также, возможно, опция "- f" в ssh для запуска фонового процесса. В таком случае, как я могу остановить это позже?

Редактировать: в ответ на комментарии сервер является частью экспериментов с производительностью. Я запускаю его аналогично клиенту.

ssh user@${server} runserver 

Единственное отличие состоит в том, что я хочу запустить сервер один раз, запустить несколько экспериментов на клиентах с различными параметрами, а затем остановить сервер. Я мог бы попробовать что-то подобное

ssh user@${server} runserver &
for t in 0 1 2 3 4 5 6 7 8 9; do
    cmd1="ssh user@${client1} runclient --threads=${t}"
    cmd2="ssh user@${client2} runclient --threads=${t}"
    $cmd1 &
    $cmd2 &
    wait

Но так как сервер не останавливается, скрипт никогда не пройдет мимо первого wait

1 Ответ

0 голосов
/ 29 октября 2018

Отслеживайте свои PID и ждите их индивидуально.

Это также позволяет отслеживать сбои, как показано ниже:

ssh "user@${server}" runserver & main_pid=$!
for t in 0 1 2 3 4 5 6 7 8 9; do
    ssh "user@${client1}" "runclient --threads=${t}" & client1_pid=$!
    ssh "user@${client2}" "runclient --threads=${t}" & client2_pid=$!
    wait "$client1_pid" || echo "ERROR: $client1 exit status $? when run with $t threads"
    wait "$client2_pid" || echo "ERROR: $client2 exit status $? when run with $t threads"
done
kill "$main_pid"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...