nohup命令详解

nohup 是一个在类 Unix 系统中使用的命令,它代表“no hang up”,意味着不挂断。这个命令允许用户运行一个进程,并且即使用户退出登录或断开连接后,该进程仍然可以继续运行。这对于需要长时间执行的任务特别有用,比如数据备份、服务器监控等。

使用方法

基本的使用语法如下:

1
nohup command [arguments] &
  • command:你希望执行的命令。
  • [arguments]:传递给命令的参数(如果有的话)。
  • &:将命令放到后台执行。

当你使用 nohup 运行一个命令时,它的输出默认会被重定向到当前目录下的 nohup.out 文件中,除非你手动指定了其他输出文件。

示例

假设你想在后台运行一个名为 my_script.sh 的脚本,并且希望其输出被保存到 my_output.txt 文件中,你可以这样做:

1
nohup ./my_script.sh > my_output.txt 2>&1 &
  • my_output.txt 将标准输出重定向到 my_output.txt。
  • 2>&1 表示将标准错误也重定向到标准输出的位置(即 my_output.txt)。

启动jar包

1
nohup java -jar app.jar > app.log 2>&1 &

注意事项

  1. 前台 vs 后台:如果你忘记添加 & 在命令末尾,使得命令在前台运行,你可以通过按下 Ctrl+A 然后 Ctrl+D 来将其放入后台运行。不过,更简单的方法是直接在命令末尾加上 &。
  2. 查看输出:由于 nohup 默认会将输出写入 nohup.out 文件,你可以随时查看这个文件来了解程序的执行情况。
  3. 关闭终端的影响:即使关闭了终端,由 nohup 启动的进程也会继续运行。但是,如果你使用的是图形界面下的终端模拟器,有时关闭窗口可能会发送一个 HUP 信号,因此最好确保使用了 nohup 或者考虑使用 disown 命令。
  4. 与 screen 或 tmux 结合使用:对于需要交互的任务,可能更适合使用 screen 或 tmux,它们提供了会话管理功能,可以在断开连接后重新连接到会话。