我似乎想不出一个通过 ssh 管理作业的得体方法。我想在 ssh 会话中启动一项作业,注销,重新登录,执行 fg,检查作业,注销,然后重复整个过程。nohup 似乎不太好用。
我用了这个命令
$ nohup script & > nohup.out
[1] 28128
$ nohup: ignoring input and appending output to `nohup.out'
[1]+ Exit 255 nohup script
如果我做
$ jobs
$ ps -ef | grep script
我什么也没得到,即没有找到该进程。
另外,我有一个相关的问题:如果我在 ssh 会话中,并且想要将作业发送到后台,ctrl-z 不起作用。该怎么办?
有人能帮助我吗?
答案1
答案2
我也使用屏幕来实现这一点..通常我登录并运行
screen -S $meaningful-name
然后当我重新连接时我只需运行
screen -r $meaningful-name
如果我在我们的一台服务器上以 root 身份运行,我通常也会将我的用户名放在屏幕会话名称中,以便其他人可以看到它并在需要时连接到它。
答案3
你可以使用程序screen
。我用它来管理几个交互式 shell 程序。
用法:
screen
startyoujob.sh
<C-A D> (Ctrl A then D, will detach your session)
screen -r (this will reattach your session)
screen
以下是一些建议Arch Linux 维基, 这官方screen
网站, 还有一些有关您的 screenrc 的提示和技巧(带有屏幕截图)。
答案4
如果您不想使用 screen,唯一的其他选择是将所有输出发送到日志文件,然后在日志文件上运行 tail 以查看进度。这假设该作业不是交互式的,对于任何长时间运行的作业来说,情况可能都是如此。如果您需要提前停止该作业,可以使用 ps 找到 pid 并将其终止。
查看上面的命令,您应该能够检查 nohup.out 的内容。但是,Nohup 不是必需的,您可以启动作业,运行 ^Z,然后键入“disown”(无论如何在 bash 中 - 这会从作业列表中删除作业,但没有办法解决这个问题)。