Написание скрипта для запуска через несколько уровней сервера
Каждый день мне нужно начинать работу над набором ноутбуков Jupyter. Записные книжки Jupyter должны быть запущены в докере, расположенном на удаленном сервере, к которому у меня есть соединение ssh через мой ноутбук. Таким образом, каждый раз, когда мне нужно начать работу, для выполнения каждой команды требуется около 5 минут: туннелирование, запуск, выход, установка второго ssh для ноутбука и т. Д. Я хотел бы написать сценарий, который делает все это. Моя проблема в том, что я не знаю, как написать сценарий так, чтобы он выполнялся на моем ноутбуке, создавал ssh, а затем на сервере bash мог затем выполнить сценарий для запуска докера, а затем в командной строке докера перейдите в каталог Записная книжка и запустите записную книжку Jupyter. На каждом этапе требуется всего 2 или 3 команды, но из-за того, что они находятся на разных платформах, у меня возникают трудности.
2 ответа
Сценарий в основном (очень простой) представляет собой список команд, возможно, если вы запустите ssh connection -> cd to the folder -> выполнение команды, вы можете создать файл, который будет выглядеть следующим образом:
#!/bin/bash
ssh user@server -x "cd /path/to && mycommand"
и так далее.
Просто чтобы расширить ответ AtomiX84, ваш финальный сценарий должен содержать две строки.
Этот ответ предполагает, что вы используете bash. Если вы еще не выполняли скрипты bash, быстро просмотрите это руководство.
Как показано выше, команда SSH сама по себе может выдавать несколько команд серверу, а затем автоматически завершать соединение по завершении:
ssh host command; command /full/path/to/file; command
Обратите внимание, что в этом примере и в сценариях в целом не принято менять каталоги, чтобы получить доступ к файлу или исполняемому файлу в сценарии. Вместо этого вы укажите абсолютный путь к файлу / exectuable / image, который вы хотите использовать.
Вы должны использовать docker run вместо использования docker CLI, так как все может стать сложнее при попытке автоматизировать подоболочку. Вам следует выбрать одноразовую команду, которая ссылается на абсолютный путь к любому файлу изображения jupyter, который вам нужен. Вы должны убедиться, что ваш docker run
Команда запускается в фоновом режиме с -d
возможность запустить его в отдельном режиме. Вы также можете использовать --rm
с этим, чтобы демон не останавливался, когда ваше соединение SSH завершается. Таким образом, вы сохраните контроль над оболочкой, и ваша команда SSH может безопасно завершиться, и ваш сценарий может перейти к следующему шагу подключения к ноутбуку.
Я не проделал большую работу напрямую с Jupyter, поэтому я вытащил отсюда команду запуска docker. Надеюсь, это описывает ваши настройки. Ваша последняя команда SSH будет выглядеть примерно так:
#!/bin/bash
ssh server-host "docker run -p -d --rm 8888:8888 jupyter/scipy-notebook:2c80cf3537ca"
ssh notebook-host
Первая команда ssh должна автоматически завершиться, когда она раскручивает сервер, затем вторая команда ssh соединит вас с вашим ноутбуком. В конце рабочего дня вы можете вернуться в докер и запустить ssh docker attach
вернуть сервер на передний план.