使用 nohup 命令可让程序在终端关闭后继续运行,1. 基本用法为 nohup command &,如 nohup python3 myscript.py &;2. 输出默认保存到 nohup.out,可通过 > app.log 2>&1 重定向至自定义日志文件;3. 程序需无需交互输入,否则可能卡住;4. 可通过 ps aux | grep 查看进程,kill pid 终止进程;5. nohup 不保证永久运行,系统重启或崩溃仍会中断程序;6. 如需实时查看输出,推荐使用 screen 或 tmux 替代。该方法简单有效,适合非交互式后台任务部署。
在 linux 或类 unix 系统中,当你通过终端运行一个程序时,如果关闭终端或网络断开(比如 ssh 断开),程序通常会被终止。为了防止这种情况,可以使用
nohup
命令结合
&
符号来让程序在后台持续运行,即使终端关闭也不会中断。
什么是 nohup
nohup
(no hang up)命令的作用是让程序忽略挂起信号(SIGHUP),这样即使用户退出终端或断开连接,程序依然继续运行。
如何使用 nohup 后台运行程序
基本语法如下:
nohup command &
-
command
是你要运行的程序或脚本。
-
nohup
让程序忽略终端关闭信号。
-
&
表示将程序放到后台运行。
示例:运行一个 python 脚本
nohup python3 myscript.py &
执行后你会看到类似输出:
[1] 12345 nohup: ignoring input and appending output to 'nohup.out'
-
[1] 12345
表示这是第一个后台任务,进程 ID 是 12345。
- 输出默认会写入当前目录下的
nohup.out
文件。
重定向输出(可选但推荐)
默认情况下,
nohup
会把标准输出和标准错误都追加到
nohup.out
。如果你希望自定义日志文件,可以手动重定向:
nohup python3 myscript.py > app.log 2>&1 &
解释:
-
> app.log
:将标准输出重定向到
app.log
-
2>&1
:将标准错误也重定向到标准输出(即同样写入
app.log
)
-
&
:后台运行
这样日志会保存在
app.log
中,便于后续查看。
常见问题和注意事项
-
程序仍卡住?检查是否需要输入
nohup
会忽略输入,所以如果程序需要交互式输入,可能会卡住。确保程序可以无交互运行。
-
如何查看和管理后台进程? 使用
ps
查看进程:
ps aux | grep myscript.py
使用
kill
终止进程:
kill 12345 # 替换为实际的 PID
-
关闭终端后进程仍在运行
这正是nohup
的目的。你可以重新登录后用
ps
检查程序是否还在运行。
-
nohup 不等于永久运行
它只是防止终端断开导致的中断。系统重启、程序崩溃、资源不足等情况仍可能导致程序停止。
小技巧:结合 screen 或 tmux 更灵活
虽然
nohup
很实用,但如果你需要随时回到程序的输出界面(比如查看实时日志),建议使用
screen
或
tmux
,它们提供会话保持功能,比
nohup
更灵活。
例如使用
screen
:
screen -S mytask python3 myscript.py # 按 Ctrl+A, 再按 D 脱离会话
之后可以用
screen -r mytask
重新连接。
基本上就这些。
nohup
是最简单直接的方式,适合大多数后台运行场景,尤其适合部署脚本或服务时使用。关键是记得加上
&
,并处理好输出重定向,避免日志混乱。