在linux中,用nohup将stdout和stderr一起重定向到后台日志的正确写法是:先>或>>指定stdout目标,再2>&1合并stderr;示例为nohup ./myscript.sh > app.log 2>&1 &,追加写可用>>或&>>,错误单独记录可2> error.log >/dev/null,实操需用绝对路径、设权限并验证。

在 Linux 中,将标准输出(stdout)和标准错误(stderr)一起重定向到后台日志,核心是用 nohup 启动命令,并通过重定向操作符确保两类输出都落进同一个日志文件。关键不是“分开处理”,而是让 stderr 明确流向 stdout 的目标位置。
正确写法:先重定向 stdout,再合并 stderr
必须按顺序写:> log.txt 2>&1,不能颠倒。
-
>把 stdout 写入日志文件(覆盖写入) -
2>&1表示“把文件描述符 2(stderr)重定向到当前 stdout 的目标”,也就是也写进同一个 log.txt - 完整命令示例:
nohup ./myscript.sh > app.log 2>&1 &
追加写入日志(避免覆盖已有内容)
如果任务会多次启动、或希望日志持续累积,改用 >>:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
nohup ./myscript.sh >> app.log 2>&1 &- 等效简洁写法:
nohup ./myscript.sh &>> app.log &(&>> 是 bash 4.0+ 支持的语法,语义更清晰)
只保留错误、丢弃正常输出
某些场景下,只需审计错误(如服务启动失败),可反向设计:
nohup ./myscript.sh 2> error.log >/dev/null &- 先将 stderr 单独重定向到 error.log,再把 stdout 丢进
/dev/null
提升日志可用性的实操建议
光写进文件还不够,得让它真正可用:
- 用绝对路径写日志,例如
/var/log/myapp/audit.log,避免因工作目录切换导致写入失败或错位 - 设权限:运行后执行
chmod 600 /var/log/myapp/audit.log,防止非授权读取敏感信息 - 验证是否生效:启动后检查进程是否存在(
ps aux | grep myscript),再用tail -n 5 app.log看是否有输出










