假设我有一台笔记本电脑和一台 Ubuntu 服务器。我想在 Ubuntu 服务器上执行一项繁重的任务。
到目前为止,我通过 SSH 连接到服务器并执行了该操作。但是,当我需要关闭笔记本电脑(离开办公室)时,SSH 会话丢失,我不知道该过程发生了什么。
有没有一种解决方案可以让我让该进程在 Ubuntu 服务器上运行,并且明天早上当我打开笔记本电脑时,我可以继续检查该进程的进展情况?
答案1
在服务器上使用 screen 命令。如果服务器上没有相关软件包,则需要安装
sudo apt-get install screen
创建屏幕
screen
执行您想要在该屏幕中运行的命令
按 ++Ctrl退出屏幕ad
列出屏幕
# screen -ls
现在您可以退出 ssh 会话,因为您的命令正在屏幕上运行
再次 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