在shell中运行命令,并在关闭会话时继续运行该命令

时间:2009-01-10 18:46:56

标签: linux shell command

我正在使用Putty连接到远程服务器。我想知道的是,如果有任何方法可以编写我的命令并允许它们在我用Putty关闭会话后继续运行。原因是我不想一直打开电脑。有没有办法做到这一点?。

使用解决方案进行更新

对于我提出的问题,最佳解决方案是使用提供的命令之一,例如 nohup ,因为您不必安装任何其他软件。但如果您遇到同样的问题,请使用屏幕,安装并使用它。太棒了。

我选择了Norman Ramsey的答案作为最爱,因为使用命令和屏幕提出了几个解决方案。但是请特别检查PEZ的其他答案,然后你就可以了解屏幕能够做什么。

9 个答案:

答案 0 :(得分:84)

屏幕!这是自切片面包以来最好的事情。 (是的,我知道其他人已经提出过这个建议,但是整个世界都应该加入并建议它。)

屏幕就像,嗯...就像使用VNC等连接到GUI destop,但是用于命令shell窗口。您可以在同一个屏幕会话中同时打开多个shell“窗口”。你可以这样做:

  1. 使用“screen -dR”启动屏幕会话(习惯使用-dR)
    • 在一个窗口中运行一些命令
    • CTRL - A C 创建一个新窗口,在vim中打开一个文件
    • CTRL - A 0 返回第一个窗口并对刚刚编辑的文件发出一些命令
    • CTRL - A 1 返回vim会话
    • CTRL - A C 换另一个窗口,也许做“sudo - su”(因为你恰好需要一个完整的root shell)
    • CTRL - A 0 并启动后台流程
    • CTRL - A C 创建一个新窗口,“tail -f”该后台进程的日志
    • CTRL - A d 断开屏幕然后 CTRL - D 断开与服务器的连接
    • 去度假三个星期
    • 再次登录服务器并发出“screen -dR”以连接到现有的屏幕会话
    • 使用 CTRL - A 3 检查第四个窗口中的日志(就像你一直在那里看着它一样时间)
    • CTRL - A 1 再次获取该vim会话
    • 我猜你现在开始拍照了吗? =)
  2. 就像魔术一样。我一直在使用屏幕比我记忆中的时间更长,我仍然对它的血腥程度感到非常惊讶。

    编辑:只想提及现在还有 tmux 。非常像屏幕,但具有一些独特的功能,将窗户拆分为最突出的。

答案 1 :(得分:28)

nohupdisownscreen都很好,但screen是最好的,因为与其他两个不同,screen允许您断开连接远程服务器,保持一切运行,然后重新连接以查看发生了什么。使用nohupdisown,您无法恢复互动。

答案 2 :(得分:10)

尝试使用GNU Screen。它允许您一次打开几个shell。你可以与那些正在运行的炮弹断开连接(即与Putty关闭会话),他们会继续做他们的事情。

答案 3 :(得分:9)

您要找的是nohup

请参阅wiki链接以了解如何使用它。

答案 4 :(得分:5)

屏幕是最好的。

尝试:

screen -dmS“MyTail”tail -f / var / log / syslog

此后台启动命令。

使用screen -r列出,或者屏幕-r Mytail进入会话。

如果更多用户需要访问同一会话,请使用:screen -rx MyTail,并且两个或更多用户共享会话。

答案 5 :(得分:4)

如果您无法使用screen(例如,因为您的SSH会话是以编程方式驱动的),您还可以使用daemonize将该程序作为守护程序运行。

答案 6 :(得分:3)

一种适合我的方法是at

at就像cron一样,但是对于一次性工作。我今天用它来下载一个大文件,而不必保持我的会话活着。

例如:

$ at 23:55
at> wget http://file.to.download.com/bigfile.iso
at> ^D  

你传递at一次(将来),它会给你一个提示。您输入当时要运行的命令并按ctrl + d。您可以退出会话,它将在指定的时间运行命令。

Wikipediaat上有更多信息。

答案 7 :(得分:1)

./command & disown

答案 8 :(得分:0)

ssh localhost && ./command && exit