最常用且可靠的方式是用2>>重定向stderr单独记录错误,或用>>和2>&1组合同时记录stdout与stderr;还可通过exec全局重定向、花括号分组加时间戳提升健壮性。

在 Linux 运维脚本中,把标准错误(stderr)重定向到日志文件,最常用且可靠的方式是使用 2>&1 配合标准输出(stdout)的重定向,或者直接单独重定向 stderr。关键是要区分清楚你想记录什么、是否保留屏幕输出、以及日志是否需要追加。
只记录错误,不干扰终端输出
如果希望脚本正常运行时仍能在终端看到 stdout(比如进度提示),但把报错信息统一写入日志,用以下方式:
command 2>>/var/log/myscript.err
说明:
-
2>>表示以追加模式重定向文件描述符 2(即 stderr) - 不会影响 stdout 输出,终端依然可见正常信息
- 适合调试阶段或需人工盯屏的运维任务
同时记录标准输出和标准错误到同一日志
多数生产脚本推荐这种方式,便于完整回溯执行过程:
command >>/var/log/myscript.log 2>&1
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
说明:
-
>>先将 stdout 追加到日志 -
2>&1让 stderr 指向当前 stdout 的目标(即日志文件) - 注意顺序不能颠倒:必须先重定向 stdout,
2>&1才能生效 - 如果想覆盖而非追加,把
>>换成>
在脚本中全局重定向所有错误
在 Shell 脚本开头加上一行,可让后续所有命令的 stderr 都进日志:
exec 2>>/var/log/myscript.log
说明:
-
exec对当前 shell 进程生效,后续所有子命令继承该 stderr 重定向 - stdout 仍输出到终端,适合“只关心错误日志”的场景
- 若也想把 stdout 统一记录,加一句
exec >>/var/log/myscript.log即可
带时间戳和上下文的健壮写法
真实运维中建议增强可读性,例如:
{ echo "[$(date '+%Y-%m-%d %H:%M:%S')] Starting backup" /usr/bin/rsync -av /data/ /backup/ 2>&1 } >>/var/log/backup.log 2>&1
说明:
- 用花括号包裹一组命令,整体重定向,避免每行重复写
- 手动打时间戳 + 语义化日志头,排查时更清晰
- 错误和输出混在一起,但有明确分隔,比纯二进制日志更易读










