Я запускаю эксперименты по производительности клиент-сервер на нескольких удаленных машинах. Я пытаюсь написать сценарий для автоматизации экспериментов. Вот как это выглядит (в упрощенном виде) на данный момент.
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
подключается к серверу, который я запустил вручную. Он отлично работает, но я бы хотел автоматизировать запуск и остановку сервера. Это значит
- Запустите сервер в фоновом режиме в начале эксперимента
- Запустить все эксперименты
- Остановить сервер в конце эксперимента
Я нашел несколько предложений, но я не уверен, какое из них мне подходит. Некоторые рекомендуют 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