我有一个远程服务器,并通过浏览器连接到那里托管的Jupyter笔记本。jupyter 服务通过 运行systemd
。问题是 jupyter 期望两个 ctrl-c
命令在 5 秒内完全关闭。systemd
只发送一个信号来停止进程,然后等待超时,当它看到 jupyter 没有停止时,最后发送一个终止信号。当我想停止或重新启动服务时,这会导致长时间的延迟和不干净的退出。我知道 systemd 有一个ExecStop
参数,但找不到任何有关如何实际使用它的示例,以及如何ctrl-c
通过此机制发送相当于两次击键的示例。
我当前的服务文件是:
[Unit]
Description=Jupyter notebook
[Service]
Type=simple
PIDFile=/var/run/jupyter-notebook.pid
ExecStart=/home/linuxbrew/.linuxbrew/bin/jupyter notebook --no-browser
User=pgcudahy
Group=pgcudahy
WorkingDirectory=/home/pgcudahy
Environment=PATH=/home/linuxbrew/.linuxbrew/opt/python/libexec/bin:/home/linuxbrew/.linuxbrew/opt/cython/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/pgcudahy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud) 我有一个远程服务器,我通常使用 ssh 连接到它,连接后 byobu 会自动启动(通过 .profile 中使用脚本设置的一行byobu-enable
)。现在,我想在连接到同一服务器以使用远程 jupyter 笔记本时设置不同的工作流程。我希望远程服务器启动 jupyter,然后让 ssh 将jupyter
端口转发到我的客户端计算机。我将其添加到本地 .ssh/config 中
Host remote-server-jupyter
HostName 123.45.6.789
User pgcudahy
LocalForward 8889 localhost:8889
ServerAliveInterval 30
ServerAliveCountMax 3
RemoteCommand cd ~/Projects && jupyter notebook --no-browser --port=8889
Run Code Online (Sandbox Code Playgroud)
问题是“RemoteCommand”会干扰 byobu 启动,因此在连接并运行该命令后,我留下的是纯文本 shell,而不是漂亮的多路复用屏幕。如何在连接时同时获取 byobu 和远程命令?
重要的是,我不希望这些命令在每个连接上运行,除非我指定需要特定的工作流程。显然,我可以连接到 byobu,然后在服务器上运行脚本来设置我的工作区,但我想将这一切包装到来自客户端的一个自动命令中。更好的是拥有单独的配置文件,不仅运行自定义命令,还设置一个具有多个窗口和每个窗口中不同命令的自定义 byobu 工作区。