在 Ubuntu 服务器上运行一个耗时较长的进程

在 Ubuntu 服务器上运行一个耗时较长的进程

假设我有一台笔记本电脑和一台 Ubuntu 服务器。我想在 Ubuntu 服务器上执行一项繁重的任务。

到目前为止,我通过 SSH 连接到服务器并执行了该操作。但是,当我需要关闭笔记本电脑(离开办公室)时,SSH 会话丢失,我不知道该过程发生了什么。

有没有一种解决方案可以让我让该进程在 Ubuntu 服务器上运行,并且明天早上当我打开笔记本电脑时,我可以继续检查该进程的进展情况?

答案1

在服务器上使用 screen 命令。如果服务器上没有相关软件包,则需要安装

sudo apt-get install screen
  1. 创建屏幕

    screen
    
  2. 执行您想要在该屏幕中运行的命令

  3. 按 ++Ctrl退出屏幕ad

  4. 列出屏幕

    # screen -ls 
    
  5. 现在您可以退出 ssh 会话,因为您的命令正在屏幕上运行

  6. 再次 ssh 并附加屏幕以检查命令状态

    screen -r screen_name
    

答案2

nohup以:开始您的命令nohup {command} {args...},并经常将输出重新路由到文件:nohup {command} {args...} >{logfile}

除其他事项外,nohup还会阻止您的命令接收通知其父命令已断开连接的 SIGHUP 信号。

如果您重新连接并想要检查输出,请执行tail -f {logfile}

答案3

我通常在后台运行任务并将输出记录到文件中,通过“跟踪”我的日志来检查进度:

$> my_long_task.sh > stdout.log 2> stderr.log &

当我想检查状态时我会这样做:

$> tail stdout.log
$> tail stderr.log

相关内容