在 Linux 运维工作中,nohup、&和重定向是实现程序后台稳定运行的核心工具。搞清楚它的原理,使用合适的组合与技巧,工作中就可以掌控后台进程。
一、核心工具作用:nohup、&、重定向
nohup:全称 “no hang up”,让程序忽略终端关闭时的 SIGHUP 终止信号,确保终端断开后进程继续运行。单独使用会占用终端,需配合&。
&:将程序转入后台运行,不阻塞终端,可继续输入命令。但单独使用时,终端关闭后进程会终止,必须与nohup搭配。
重定向:管理程序输出,避免日志混乱。常用符号:
-
>:覆盖写入文件;>>:追加写入
-
2>:重定向错误输出(stderr)
-
2>&1:合并错误与标准输出(stdout)
-
/dev/null:丢弃输出,不保存日志
二、实际运维工作中的组合方案
1. 基础方案:默认输出
nohup 命令 &
#输出默认写入nohup.out
适用于临时测试,如写一个检测内网某个应用的页面是否正常访问的perl脚本,然后后台执行:

执行后返回 PID(如截图的7886),脚本正常执行完成,日志可通过ca命令查看,如果程序不是立即完成的,可通过tail -f nohup.out滚动查看。
2. 标准方案:分离输出
需区分正常与错误日志时,用nohup 命令 > 标准日志 2> 错误日志 &,适用于生产环境。示例:
nohup node server.js > server.log 2> server_error.log &
3. 简化方案:合并输出
无需区分日志时,用nohup 命令 > 合并日志 2>&1 &。示例:
nohup ./backup.sh > backup.log 2>&1 &
4. 纯净方案:丢弃输出
无日志需求时,定向到/dev/null:
nohup ./monitor > /dev/null 2>&1 &
三、进程管理技巧
- 查看进程
jobs -l #查看当前终端后台任务,显示编号与 PID,切换终端失效。
ps aux | grep 关键词 #查看系统所有进程,如ps aux | grep python3,不受终端限制
- 终止进程
正常终止:kill PID(如kill 12345)
四、常见问题解决
- 程序启动即终止:检查命令路径(用绝对路径)、依赖是否缺失,先前台执行验证;
- 日志不生成:确认重定向顺序(正确:> log.log 2>&1),排查目录权限(用touch test.log测试);
- 终端关闭进程终止:确保加nohup,含管道命令需用括号包裹(如nohup (cmd1 | cmd2) > log.log 2>&1 &)。
总而言之,nohup保活(关闭终端也可运行)、&实现后台运行、重定向管理日志,三者组合是 Linux 后台运行程序的关键。根据场景选择方案,结合jobs、ps、kill管理进程,可大幅提升运维效率。
846

被折叠的 条评论
为什么被折叠?



