我似乎无法找到一种通过 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 不起作用。该怎么办?
任何人都可以帮助我吗?
好吧,其中一个选项是使用screen。
更多例子在这里。
另一个——如果是一次性工作可能更糟——选项是妖魔化你的 shell 脚本,添加适当的日志记录并使用 start-stop-daemon 在后台运行它,直到它完成。状态 - 可以在生成的日志中检查。
我也为此使用屏幕..通常我登录并运行
然后当我重新连接时,我就跑
如果我在我们的一台服务器上以 root 身份运行,我通常也会将我的用户名放在屏幕会话名称中,以便其他人可以看到它并在需要时连接到它。
您可以使用该程序
screen
。我用它来管理几个交互式 shell 程序。用法:
Arch Linux Wiki,官方网站上的一些
screen
提示,以及 screenrc 的一些提示和技巧(带有屏幕截图)。screen
如果您想以无人看管的方式使用屏幕,请使用:
这会将您的脚本置于后台,分离!现在您可以轻松注销并继续您正在做的事情。
如果您不想使用屏幕,唯一的其他选择是将所有输出发送到日志文件,然后在日志文件上运行 tail 以查看进度。这假设该作业不是交互式的,无论如何,任何长期运行的作业都应该是这种情况。如果您需要提前停止工作,您可以使用 ps 找到 pid 并直接将其杀死。
查看上面的命令,您应该能够检查 nohup.out 的内容。Nohup 不是必需的,但是,您可以启动作业,运行 ^Z,然后键入“disown”(无论如何在 bash 中 - 这将从作业列表中删除作业,但没有办法解决这个问题)。
您可以使用以下命令将 screen 和 ssh 合二为一:
按 Control-A Control-D 断开连接。