Общий вопрос здесь - как мне автоматизировать sshing в машину, запустить скрипт и выйти из него, не убивая скрипт? Я знаю, что на это уже отвечали несколько раз, но мне не повезло с решениями, которые я нашел.

Детали:

У меня есть код, работающий на нескольких машинах, в которые я вхожу.

Прямо сейчас я делаю следующее в терминале:

ssh machine1@host (log in automatically with key)
screen -S screen_name
./script.sh
<keystroke C-a-d>
exit

Отнимает много времени и, что более важно, подвержен ошибкам (откройте экран и выйдите из него без запуска сценария и т.д.).

Я хотел бы автоматизировать это. Моей первой мыслью было попытаться воспроизвести это точно. Я пытался xdotool отправлять нажатия клавиш, но моя среда - только командная строка, и это похоже на неподходящий инструмент для работы. Точно так же ожидаемо выглядит, как будто его можно использовать вместо xdotool, но, опять же, вероятно, неправильный способ сделать это.

Я также попытался использовать nohup вместо экрана, выполнив nohup ./script.sh &

но когда я выхожу из сеанса ssh и возвращаюсь, это выглядит так, как будто скрипт перестал работать, когда я вышел из системы. Насколько я могу судить, nohup - верный способ сделать это.

1 ответ1

1

ТЛ; др:

$ ssh host 'nohup your-command &' &

Вот пример:

$ ssh localhost 'nohup sleep 10 &' &
[1] 12345
$ sleep 5 && ps x | grep '[s]leep 10'
24044 pts/0    S      0:00 ssh localhost nohup sleep 10 &
24054 ?        S      0:00 sleep 10

Это запускает SSH-соединение, запускает sleep 10 в фоновом режиме на целевом хосте (который оказывается вашим локальным хостом) и проверяет список процессов (ps), чтобы убедиться, что он все еще работает после завершения работы ssh .

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