我使用PuTTY
提交bash
文件 来Amazon Web Services EC2
运行文件。提交文件时R
光标消失,直到所有文件运行完毕后才重新出现(目前约 40 分钟后,但最终 10-20 小时后)。PuTTY
bash
R
我在各个大学和非政府组织使用集群时从未见过这种情况。从历史上看,光标总是立即重新出现。
如果我在所有R
文件运行完成之前关闭笔记本电脑,这会导致R
文件崩溃或无法完成运行吗?
有什么方法可以让光标立即重新出现吗PuTTY
?
答案1
我在各个大学和非政府组织使用集群时从未见过这种情况。从历史上看,光标总是立即重新出现。
据我所知,区别在于大多数集群会告诉您使用特殊命令,例如qsub
用于批量作业提交的命令。这些命令会立即返回,因为它们不会立即运行脚本 - 它们只是将其添加到队列中,然后由单独的系统决定在何处以及何时运行您的脚本。
然而,在 AWS 上,你不需要任何这些——它是一个完全普通的 Linux 系统。如果你直接通过./myscript.sh
或运行 Bash 脚本bash myscript.sh
,那么它做立即在终端中运行。与运行的任何其他程序一样,shell 提示符在程序完成之前不会再次出现。
如果我在所有 R 文件运行完成之前关闭我的笔记本电脑,这会导致 R 文件崩溃或无法完成运行吗?
是的,当终端关闭时(即当连接“挂断”),从该终端运行的所有进程都会收到退出信号。它们可能会忽略该信号,但通常会立即退出。
有什么方法可以让光标立即重新出现在 PuTTY 中?
Linux 上长时间运行的任务有两种最常见的选项:
使用 Bash 的作业控制,即附加
&
在后台运行命令。例如:./slowscript.sh &
如果您忘记添加
&
,您可以按CtrlZ,然后按bg
命令将已运行的程序置于后台。请注意,当您关闭 SSH 连接时,受作业控制的程序仍将被终止。为了避免这种情况,您还需要
disown
每个作业 - 您将不再能够看到其状态,但它也不会再因挂断而被终止。使用“终端多路复用器”,例如tmux或者屏幕。它们不需要处理批处理作业,而是让你将整个终端置于后台。
因此,您可以先运行
tmux
创建一个“可分离”终端,然后从那里启动您的 R 脚本,并在运行时CtrlB按下以D将其分离。(即使您忘记分离,断开连接时也会自动发生 - 程序仍将在 tmux 内运行。)稍后您可以使用
tmux at[tach]
重新连接。在某些 Linux 发行版中,您还可以使用 systemd 启动后台作业。首先需要使用 启用此功能
sudo loginctl enable-linger $USER
。一旦启用,您可以使用以下方式启动后台任务
systemd-run
:systemd-run --user --same-dir ./myscript.sh
稍后您可以使用它
systemctl --user .....
来查看作业的状态。