作业控制和ssh

我似乎无法找出一个体面的方式来pipe理通过SSH的工作。 我想在ssh会话中启动一个工作,注销,重新login,执行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 

我什么也得不到,即没有find这个过程。

另外,我有一个相关的问题是:如果我在一个SSH会话,并想发送一个工作的背景,CTRL-Z不起作用。 该怎么办?

任何人都可以帮我吗?

好 – 其中一个select是使用屏幕 。

  1. 你login
  2. 你启动屏幕
  3. 你运行你的工作
  4. 你按CTRL +广告分离
  5. 你注销
  6. 几个小时后,你loginarain并运行屏幕-r – 你的shell / job结果在你面前。 或者它仍然运行…

更多的例子。

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

我使用屏幕以及..通常我login并运行

 screen -S $meaningful-name 

然后当我重新连接,我只是跑

 screen -r $meaningful-name 

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

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

用法:

 screen startyoujob.sh <CA D> (Ctrl A then D, will detach your session) screen -r (this will reattach your session) 

Arch Linux Wiki screen的几个screen提示, 官方screen网站 ,以及screenrc的一些提示和技巧(包括屏幕截图)。

如果您想以无人看pipe的方式使用屏幕,请使用:

 # screen -d -m script.sh 

那会把你的脚本放在后台,分离! 现在你可以轻松注销并继续你在做什么。

如果您不想使用屏幕,唯一的select是将所有输出发送到日志文件,并在日志文件上运行尾部以查看进度。 这是假定这个工作不是互动的,无论如何,长期运行的工作应该是这种情况。 如果你需要过早地停止工作,你可以使用ps来findpid,然后杀死它。

看看你的命令,你应该可以检查nohup.out的内容。 Nohup不是必须的,但是,你可以启动这个工作,运行^ Z,然后键入'disown'(无论如何bash – 这将从作业列表中删除作业,但没有办法解决这个问题)。

您可以使用此命令将屏幕和ssh组合成一个:

 ssh hostname -t screen -RD 

按下Control-A Control-D断开连接。