问题

在 Linux 服务器上运行程序时,断开终端连接时,程序会自动停止运行,并且程序输出的内容也会消失。

针对这种情况,我们需要一种可以在后台运行程序,并且可以跟踪查看输出的方法。

说明

SIGHUP

在 POSIX 兼容平台上,SIGHUP 是在进程的控制终端关闭时发送给该进程的信号。

解决方案

nohup

nohup英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。

  • 在后台运行程序,程序输出会保存至当前目录下的nohup.out文件中。
nohup ./filename &
  • 重定向输出stdout到指定文件,这里是当前目录下的output.txt文件中。
nohup ./filename > output.txt &
  • 重定向输出stdout和标准错误输出stderr到指定文件。
nohup ./filename > output.txt 2 > &1 &

0 – stdin (standard input,标准输入) 1 – stdout (standard output,标准输出) 2 – stderr (standard error,标准错误输出)

tail

tail命令可用于查看文件的内容,使用参数-f可以用于跟踪正在改变的文件。

  • 查看文件结尾 10 行
tail output.txt
  • 查看文件结尾 10 行,并跟踪文件变化。
tail -f output.txt
  • 查看文件结尾 20 行,并跟踪文件变化。
tail -n 20 -f output.txt
  • 查看文件第 1 行开始,即全部内容,并跟踪文件变化。
tail -n +1 -f output.txt

参考