在 shell 中运行命令并在关闭会话时继续运行该命令
题
我正在使用 Putty 连接到远程服务器。我想知道是否有任何方法可以编写我的命令并允许它们在我用 Putty 关闭会话后继续运行。这样做的原因是我不想让电脑一直开着。有什么办法可以做到这一点吗?
更新解决方案
对于我提出的问题,最好的解决方案是使用提供的命令之一,例如 诺哈普, ,因为您无需安装任何其他软件。但是,如果您遇到同样的问题,请使用屏幕,安装并使用它。太神奇了。
我选择 Norman Ramsey 的答案作为最喜欢的答案,因为提出了几种使用命令的解决方案和 屏幕. 。但请检查其他答案,特别是 PEZ 的答案,然后您就会了解屏幕能够做什么。
解决方案
nohup
, disown
和 screen
都很好,但 screen
是最好的,因为与其他两个不同, screen
允许您断开与远程服务器的连接,保持一切正常运行,然后重新连接以查看发生的情况。使用 nohup
和 disown
,您无法恢复交互。
其他提示
屏幕! 这是自从切片面包以来最好的东西。(是的,我知道其他人已经建议了它,但它太好了,全世界都应该加入并建议它。)
屏幕就像,就像,嗯……就像使用 VNC 等连接到 GUI 桌面一样,但适用于命令 shell 窗口。您可以在同一屏幕会话中同时打开多个 shell“窗口”。你可以做这样的事情:
- 使用“screen -dR”启动屏幕会话(习惯使用-dR)
- 在一个窗口中运行一些命令
- 按 控制键-A,C 创建一个新窗口,在 vim 中打开一个文件
- 按 控制键-A,0 返回第一个窗口并对您刚刚编辑的文件发出一些命令
- 控制键-A, 1 返回到你的 vim 会话
- 控制键-A, C 对于另一个窗口,也许可以执行“sudo - su”(因为您恰好需要一个完整的 root shell)
- 控制键-A, 0 并启动后台进程
- 控制键-A, C 要创建一个新窗口,请“tail -f”该后台进程的日志
- 控制键-A, d 然后断开屏幕连接 控制键-D 与服务器断开连接
- 去度假三周
- 再次登录服务器并发出“screen -dR”以连接到现有的 screen 会话
- 检查第四个窗口中的日志 控制键-A, 3 (就好像你一直在那里看着一样)
- 控制键-A, 1 再次开始该 vim 会话
- 我想你现在开始明白了吧?=)
这就像魔法一样。我使用屏幕的时间已经超出了我的记忆,但我仍然对它的出色表现感到非常惊讶。
编辑: :只是想提一下现在还有 多路复用器. 。非常喜欢 屏幕, ,但有一些独特的功能,分割窗户是最突出的一个。
尝试使用 GNU Screen 。它允许您一次打开几个shell。你可以与那些正在运行的炮弹断开连接(即与Putty关闭会话),他们会继续做他们的事情。
您正在寻找的是 nohup 。
请参阅wiki链接以了解如何使用它。
屏幕是最好的。
尝试:
screen -dmS" MyTail" tail -f / var / log / syslog
此后台启动命令。
使用screen -r列出,或者屏幕-r Mytail进入会话。
如果更多用户需要访问同一会话,请使用:screen -rx MyTail,并且两个或更多用户共享会话。
如果你不能使用 screen
(例如,因为你的SSH会话是以编程方式驱动的),你也可以使用 daemonize 将程序作为守护程序运行。
对我来说效果很好的一种方法是 at
。
就像cron一样,但是对于一次性工作。我今天用它来下载一个大文件,而不必保持我的会话活着。
例如:
$ at 23:55
at> wget http://file.to.download.com/bigfile.iso
at> ^D
您在
一次(将来)传递,它会提示您。您输入当时要运行的命令并按ctrl + d。您可以退出会话,它将在指定的时间运行命令。
维基百科提供了有关的更多信息
./command & disown
ssh localhost && ./command && exit