作业控制和 ssh

dev*_*vin 5 linux ssh job-control nohup

我似乎无法找到一种通过 ssh 管理工作的体面方法。我想在 ssh 会话中开始一项工作,注销,重新登录,做一个 fg,检查工作,注销,然后重复整个过程。nohup 似乎效果不佳。

我用过这个命令

 $ nohup script & > nohup.out 
 [1] 28128
 $ nohup: ignoring input and appending output to `nohup.out'
 [1]+  Exit 255                nohup script
Run Code Online (Sandbox Code Playgroud)

如果我这样做

$ jobs
$ ps -ef |  grep script
Run Code Online (Sandbox Code Playgroud)

我什么也没得到,即找不到进程。

另外,我有一个相关的问题是:如果我在 ssh 会话中,并且想将作业发送到后台,则 ctrl-z 不起作用。该怎么办?

任何人都可以帮助我吗?

pQd*_*pQd 19

不错的选择之一是使用screen

  1. 你登录
  2. 你启动屏幕
  3. 你负责你的工作
  4. 你按 ctrl+ad 来分离
  5. 你注销
  6. 几个小时后,您登录 arain 并运行screen -r - 您的外壳/作业结果就在您面前。或者它可能还在运行...

更多例子在这里

另一个 - 如果是一次性工作,可能更糟 - 选项是妖魔化您的 shell 脚本,添加适当的日志记录并使用 start-stop-daemon 在后台运行它直到它完成。状态 - 可以在生成的日志中检查。

  • 当我通过 SSH 连接时,我连接到的大多数主机都会自动启动/重新连接屏幕,所以我不会忘记,直到连接断开,该屏幕才会不再成为问题。有关设置此设置的示例,请参阅 http://tlug.dnho.net/?q=node/239 - 根据您的设置/首选项,还有其他可能更可取的变体,因此如果没有,请尝试快速谷歌不适合你。 (2认同)

Cub*_*bie 8

我也使用 screen ..通常我登录并运行

screen -S $meaningful-name
Run Code Online (Sandbox Code Playgroud)

然后当我重新连接时,我就跑

screen -r $meaningful-name
Run Code Online (Sandbox Code Playgroud)

如果我在我们的一台服务器上以 root 身份运行,我通常也会将我的用户名放在屏幕会话名称中,以便其他人可以看到它并在需要时连接到它。


Jos*_*ern 6

您可以使用该程序screen。我用它来管理几个交互式 shell 程序。

用法:

screen
startyoujob.sh
<C-A D> (Ctrl A then D, will detach your session)
screen -r (this will reattach your session)
Run Code Online (Sandbox Code Playgroud)

screen比在尖端处的Arch Linux的Wiki官方screen网站,以及一些为您screenrc提示和技巧(含屏幕截图)。