Поддерживать удаленный сеанс до конца программы с помощью скрипта?

Я хочу запустить программу на Linux-сервере A. Linux-сервер B может отслеживать показатель мощности сервера A. Но для того, чтобы измерить программу, работающую на сервере A, мне нужно открыть сценарий измерения на сервере B в начале программы на сервере A и затем вручную завершите ее на сервере B.

Итак, чтобы резюмировать, как подключиться к серверу по ssh, чтобы запустить программу и затем завершить ее через скрипт?


person JP Zhang    schedule 24.03.2020    source источник


Ответы (1)


Здесь нужно несколько хитростей. 1. Я использую sshpass для автоматического ввода пароля к машине через ssh (хранится в виде обычного текста в небезопасном скрипте). 2. Я пишу скрипт в этом скрипте, который затем выполняется через ssh 3. Я сохраняю pid программы, работающей на сервере A, в его каталоге /tmp

#!/bin/bash
PROGRAM_TO_RUN_ON_SERVER_A="sleep 1000"
PASSWORD_TO_USER_ON_SERVER_A="password"
SERVER_A_USER="user"
SERVER_A_MACHINE_NAME="machine-name"

# Create a local script to run on server A
SCRIPT=/tmp/script.sh
export SSHPASS=${PASSWORD_TO_USER_ON_SERVER_A}
echo '#!/bin/bash' > $SCRIPT
echo "(( ${PROGRAM_TO_RUN_ON_SERVER_A} 0<&- &>/dev/null & echo $! > /tmp/pid.txt) &)" >> $SCRIPT

# Execute script on server A (This also executes your program)
sshpass -e ssh ${SERVER_A_USER}@${SERVER_A_MACHINE_NAME} 'bash -s' < $SCRIPT

# Do server B timing analysis things here
# ...
# ...
# ...

# Kill the program running on server A
sshpass -e ssh ${SERVER_A_USER}@${SERVER_A_MACHINE_NAME} 'cat /tmp/pid.txt | xargs kill -9'

Получение ssh для выполнения команды в фон на целевой машине

person Lenna    schedule 24.03.2020
comment
Спасибо за этот скрипт. Только что проверил на сервере B. Это встроенная система с ограниченной поддержкой команд Linux (используется своеобразная оболочка под названием ash). Он не поддерживает nohup. Любое обходное решение? - person JP Zhang; 24.03.2020
comment
stackoverflow.com/questions/29704358/ - person Lenna; 24.03.2020
comment
Как-то я сделал это, используя простой амперсанд в конце. - person JP Zhang; 24.03.2020
comment
Я обновил свой первоначальный ответ, чтобы не использовать nohup согласно это решение. Скрипт у вас сейчас работает? - person Lenna; 24.03.2020