linux脚本记录详细操作日志的核心是重定向stdout和stderr到文件,并保留时间戳、命令本身及执行状态;可通过exec全局追加重定向、set -x+ps4添加命令前缀、手动echo关键步骤、记录返回码与耗时,以及用日期命名或logrotate管理日志文件。

Linux 脚本记录详细操作日志,核心是把标准输出(stdout)和标准错误(stderr)重定向到文件,并确保关键信息(如时间戳、命令本身、执行状态)不丢失。
用 exec 全局重定向所有输出
在脚本开头加上一行,就能让后续所有命令的输出(包括 echo、ls、grep 等)自动写入日志文件:
- 加在脚本第一行(#!/bin/bash 下面):exec >> /var/log/myscript.log 2>&1
- >> 表示追加写入,避免覆盖旧日志;2>&1 把错误也合并进同一文件
- 建议配合 date 打印起始标记,比如:echo "=== $(date) ===" >> /var/log/myscript.log
给每条命令加时间戳和命令本身
只记录输出不够,有时需要知道“哪条命令在什么时候执行了”。可用 set -x 开启调试模式,再用 PS4 自定义前缀:
- 在脚本开头添加:set -x; PS4='[$(date "+%H:%M:%S")] '
- 效果示例:[14:25:03] cp file1.txt /backup/ → 紧接着就是该命令的实际输出
- 注意:这会打印所有命令(含变量展开后的内容),适合调试,生产环境可酌情关闭
手动记录关键步骤和结果
对重要操作(如备份、重启服务、数据库更新),主动记录状态更可靠:
- 用 echo "$(date): 开始备份数据库" >> /var/log/myscript.log
- 检查命令是否成功:if rsync -a /data/ /backup/; then echo "$(date): 备份成功" >> log; else echo "$(date): 备份失败" >> log; fi
- 把返回码、耗时等也记下来:time_start=$(date +%s); your_command; time_end=$(date +%s); echo "耗时: $((time_end - time_start)) 秒" >> log
日志文件管理建议
长期运行的脚本要注意日志别把磁盘撑爆:
- 用带日期的文件名,比如:/var/log/myscript_$(date +%Y%m%d).log
- 限制单个文件大小,可用 logrotate 配置自动轮转(适合系统级脚本)
- 敏感信息(密码、token)别直接 echo 到日志,必要时用 sed 或变量掩码处理











