运行Bash脚本而不在退出时结束它

时间:2013-06-17 15:22:31

标签: bash ubuntu background

基本上,我正在使用远程服务器,并通过SSH连接。现在,我可以使用SSH控制台正常运行进程/执行bash脚本,但是有一个问题。一旦我注销,那些bash脚本就会退出。

有没有办法让我从SSH启动bash脚本,让它运行,即使我启动了bash脚本到服务器的计算机已关闭?

提前致谢, 和平! 〜汤姆

3 个答案:

答案 0 :(得分:3)

nohup程序吉姆建议是好的。请参阅其命令行选项以更改日志位置。

另一个很酷的选择是screen。当您启动它时,您可以拥有多个屏幕,如果您注销以后的登录,则可以使用screen -r重新连接到同一会话。它有许多很酷的功能,但你需要阅读文档。

最简单的事情是当你最后用&开始一些scrtips时,可以使用disown bash命令使这些脚本不以bash exit终止。

希望这能为你提供一些线索。

更新,快速入门屏幕:

  • 键入screen以开始会话
  • 您可以立即启动命令
  • Ctrl+a+c将创建一个新窗口,你可以启动它,你可以启动其他的命令
  • Ctrl+a+#其中#从0到9将移动到您选择的窗口
  • Ctrl+a+d分离你的会话,你又回到正常的终端
  • screen -r重新将您附加到会话中,如果您有多个,则会要求您键入其名称的一部分(必须是会话名称中包含的唯一序列)
  • .screenrc可以用于回滚大小,键绑定,终端选项等内容。请参阅这两个示例文件以获得不错的选项:onetwo

答案 1 :(得分:2)

测试脚本

脚本称之为remote.sh:

at now <<!
/path/to/test.h> /tmp/test.out
!

将此复制到远程复选框: scp remote.sh thomas @ remote: ssh remote'chmod + x remote.sh'

  1. 在本地的test.sh副本中编写所需的命令, 例如:
  2. cd /tmp; cp *.foo /path/to/somewhere/else

    1. 将脚本复制到远程服务器

      scp test.sh thomas @ remote: ssh remote'chmod + x test.sh'

    2. ssh remote'./remote.sh'

    3. 重复步骤1,2和&amp; 3每次需要运行脚本而不等待它时。

答案 2 :(得分:1)

在我看来,实现这一目标的最简单方法之一是使用“screen”。 这将创建一个虚拟终端,在您注销后不会终止您的任务。

  1. 登录服务器
  2. 开始屏幕(只需输入屏幕)
  3. 启动命令
  4. 注销
  5. 您的流程现在将继续有效。

    在重新登录后输入'screen -list'并找到最后一个屏幕会话的pid。 然后输入

    screen -dr YOUR_PID
    

    重新打开屏幕并继续工作。

    P.S。屏幕上充满了对远程管理非常有用的功能。看看教程。