小小白祈祷中...

nohup 是 Linux 和类 Unix 系统中的一个命令,用于在后台运行程序,即使用户退出终端或断开会话,程序依然可以继续运行。nohup 全称是 "no hang up",意思是不挂起程序。


基本语法

1
nohup 命令 [参数] &
  • nohup:表示忽略挂起信号(SIGHUP),防止程序因用户退出终端而终止。
  • 命令:需要运行的程序或脚本。
  • &:将程序放到后台运行。

nohup 的作用

  • 用于让程序在后台运行,即使用户退出终端,程序依然可以继续执行。
  • 默认情况下,nohup 会将程序的输出(标准输出和标准错误)重定向到文件 nohup.out,除非用户手动指定输出位置。

常用示例

后台运行一个程序

1
nohup python3 script.py &
  • 含义:
    • nohup 确保 script.py 即使用户退出终端也能继续运行。
    • & 将程序放到后台运行。
    • 输出和错误信息会被默认保存到当前目录下的 nohup.out 文件中。

指定输出日志文件

1
nohup python3 script.py > output.log 2>&1 &
  • 含义:
    • > output.log:将标准输出重定向到 output.log 文件。
    • 2>&1:将标准错误重定向到标准输出(output.log)。
    • &:将程序放到后台运行。

运行一个脚本

1
nohup ./myscript.sh > myscript.log 2>&1 &
  • myscript.sh 放到后台运行,输出内容保存到 myscript.log

使用 nohup 配合其他命令

运行一个长期任务

1
nohup tar -czf backup.tar.gz /data > backup.log 2>&1 &
  • /data 目录打包为 backup.tar.gz,并在后台运行,输出保存到 backup.log 文件中。

运行一个服务

1
nohup java -jar myapp.jar > myapp.log 2>&1 &
  • 启动一个 Java 应用程序,将输出保存到 myapp.log,即使终端关闭仍继续运行。

查看后台运行的任务

可以通过 jobsps 命令查看后台运行的任务。

  • 查看当前会话的后台任务

    1
    jobs

    输出示例:

    1
    [1]+  Running                 nohup python3 script.py &
  • 查看所有进程

    1
    ps aux | grep script.py

终止后台任务

  • 使用 ps 查找到进程的 PID,然后使用 kill 终止:
    1
    2
    ps aux | grep script.py
    kill -9 <PID>

注意事项

  1. 默认输出文件是 nohup.out

    • 如果没有手动指定输出文件,nohup 会将输出和错误信息保存到当前目录下的 nohup.out 文件。
    • 如果当前目录无写权限,nohup 会将输出重定向到用户的主目录下的 nohup.out
  2. 配合 & 使用

    • nohup 通常需要配合 & 使用,才能将任务放到后台运行。
    • 如果没有加 &,运行的程序不会自动进入后台,但仍然不会因终端关闭而终止。
  3. cronat 结合

    • 如果需要定时运行任务,可以将 nohup 和定时任务工具(如 cron)结合使用。

总结

  • 基本用法
    • nohup 命令 &:后台运行命令。
    • nohup 命令 > output.log 2>&1 &:后台运行命令,并指定日志文件。
  • 适用场景
    • 长时间运行的任务(如备份、压缩、大型数据处理)。
    • 启动服务或守护进程(如 Java 应用、HTTP 服务)。
  • 熟练掌握 nohup,可以让任务在后台稳定运行,避免因为退出终端导致任务中断。