linux后台任务日志需分清、留得住、查得快:可分开记录stdout/stderr、合并到单文件、追加写入或丢弃至/dev/null。

Linux中启动后台任务时,默认输出会混在一起、覆盖或丢失,关键不是“能不能”,而是“怎么分得清、留得住、查得快”。掌握几种主流重定向方式,就能按需控制日志行为。
分开记录标准输出和错误日志
把正常输出和报错信息写进不同文件,排查问题更直观。比如启动一个Java服务:
nohup java -jar app.jar > stdout.log 2> stderr.log &
说明:
• > stdout.log 把程序打印的普通日志(如启动成功、请求处理)写入 stdout.log
• 2> stderr.log 把异常堆栈、权限拒绝等错误单独存到 stderr.log
• 两个文件互不干扰,适合监控脚本分别读取
合并输出到单个日志文件
多数场景下,你只关心“这条命令整体干了什么”,无需区分输出类型。用以下任一写法都可实现:
- nohup your-command > all.log 2>&1 &
- nohup your-command &> all.log &
注意:
• 2>&1 表示“把标准错误重定向到当前标准输出所指向的位置”,所以必须写在 > all.log 后面
• &> 是 bash 简写语法,功能完全等价,但部分旧 shell 不支持
追加写入避免日志被清空
如果任务长期运行(如定时采集脚本),每次重启都覆盖日志会导致历史丢失。改用追加模式:
- nohup ./collector.sh >> runtime.log 2>&1 &
- nohup ./collector.sh &>> runtime.log &
说明:
• >> 和 &>> 都不会清空已有内容,新日志自动加在末尾
• 适合需要保留完整运行轨迹的运维或调试场景
丢弃不需要的输出
有些后台任务只需运行,不关心输出(如健康检查 ping)。可用 /dev/null 彻底静默:
nohup ping -c 10 example.com > /dev/null 2>&1 &
说明:
• > /dev/null 吞掉标准输出
• 2>&1 让错误也进黑洞,终端彻底无回显
• 节省磁盘空间,也避免因写权限失败导致进程异常退出











