Каждый день мне нужно начинать работу над набором ноутбуков Jupyter. Записные книжки Jupyter должны быть запущены в докере, который расположен на удаленном сервере, к которому у меня есть соединение ssh через мой ноутбук. Таким образом, каждый раз, когда мне нужно начать работу, для выполнения каждой команды требуется около 5 минут: туннелирование, запуск, выход, установка второго ssh для ноутбука и т.д. Я хотел бы написать сценарий, который делает все это. Моя проблема в том, что я не знаю, как написать сценарий так, чтобы он выполнялся на моем ноутбуке, создавал ssh, а затем на сервере bash мог затем выполнить сценарий для запуска докера, а затем в командной строке докера перейдите в каталог блокнот и запустите блокнот jupyter. На каждом этапе требуется всего 2 или 3 команды, но из-за того, что они находятся на разных платформах, у меня возникают трудности.

2 ответа2

1

Сценарий в основном (очень простой) представляет собой список команд, возможно, если вы запустите ssh connection -> cd to the folder -> выполнение команды, вы можете создать файл, который будет выглядеть следующим образом:

#!/bin/bash
ssh user@server -x "cd /path/to && mycommand"

и так далее.

0

Просто чтобы расширить ответ 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 подключит вас к вашему ноутбуку. В конце вашего рабочего дня вы можете вернуться в докер и запустить docker attach чтобы вернуть сервер на передний план.

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