编写脚本以通过多个服务器层启动

编写脚本以通过多个服务器层启动

每天,我都需要开始处理一组 jupyter 笔记本。jupyter 笔记本必须在位于远程服务器上的 docker 上启动,我通过笔记本电脑与该服务器建立 ssh 连接。因此,每次我需要开始工作时,运行每个命令大约需要 5 分钟:建立隧道、启动它、退出、建立到笔记本的第二个 ssh 等。我想编写一个脚本来完成所有这些操作。我的问题是我不知道如何编写脚本以便它在我的笔记本电脑上执行、创建 ssh,然后在服务器的 bash 上执行脚本以启动 docker,然后在 docker 的命令行上导航到笔记本目录并运行 jupyter 笔记本。每个阶段只需要 2 或 3 个命令,但由于它们位于不同的平台上,所以我遇到了困难。

答案1

脚本基本上(非常基础)是一个命令列表,如果你运行 ssh 连接 -> cd 到文件夹 -> 命令执行,你可以创建一个包含一些类似这样的内容的文件:

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

等等。

答案2

只是为了扩展 AtomiX84 的答案,你的最终脚本实际上只需要有两行。

本答案假设您使用的是 bash。如果您之前没有编写过 bash 脚本,请快速浏览一下本指南

如上所示,SSH 命令本身可以向服务器提供多个命令,然后在完成后自动终止连接:

ssh host command; command /full/path/to/file; command

请注意,对于此示例以及一般的脚本编写,更改目录以访问脚本中的文件或可执行文件并不常见。相反,您需要指定一个绝对路径对于您想要使用的文件/可执行文件/图像。

你应该使用docker 运行而不是使用 docker CLI,因为尝试自动化子 shell 时事情会变得复杂。您应该选择一个一次性命令,该命令引用您需要的任何 jupyter 映像文件的绝对路径。您应该确保您的docker run命令在后台运行,并可以-d选择在分离模式。您可能还必须使用此--rm选项,以便守护程序不会在 SSH 连接终止时停止。这样,您将保留 shell 控制权,并且您的 SSH 命令可以安全终止,并且您的脚本可以进入连接到笔记本的下一步。

我还没有直接使用 Jupyter 做过太多工作,所以我拉了 docker run 命令从这里。希望这能描述您的设置。您的最终 SSH 命令将类似于:

#!/bin/bash
ssh server-host "docker run -p -d --rm 8888:8888 jupyter/scipy-notebook:2c80cf3537ca"
ssh notebook-host

第一个 ssh 命令应在服务器启动时自动终止,然后第二个 ssh 命令将您连接到笔记本电脑。在工作日结束时,您可以 ssh 返回 docker 机器并运行docker attach以将服务器返回到前台。

相关内容