执行shell脚本将日志全部输出到文件的多种方法

Written by

in

文章目录
  • /appdata/mysql_backup_dump.sh > /var/log/mysql_backup.log 2>&1 >:将标准输出(stdout)重定向到 /var/log/mysql_backup.log。 2>&1:将错误输出(stderr)合并到标准输出(即也写入日志文件)。 效果:所有输出(包括 echo、mysqldump 正常信息、错误信息)都会写入日志文件。
  • /appdata/mysql_backup_dump.sh >> /var/log/mysql_backup.log 2>&1 >>:追加到日志文件(而不是覆盖),适合长期运行的备份任务。
  • /appdata/mysql_backup_dump.sh 2>&1 | tee -a /var/log/mysql_backup.log tee -a:将输出 同时显示在终端 并 追加到日志文件(-a 表示追加)。 适用场景:调试时想实时查看输出,同时保留日志。
  • 如果脚本是自己编写的,可以在脚本开头指定日志文件: #!/bin/bash exec > /var/log/mysql_backup.log 2>&1 # 所有后续输出都重定向到日志 echo “Backup started at $(date)” # 备份命令(如 mysqldump) exec:重定向整个脚本的输出,包括后续所有命令。
  • 如果希望日志进入系统日志(如 /var/log/syslog 或 /var/log/messages): /appdata/mysql_backup_dump.sh > /tmp/backup.log 2>&1 logger -t “MySQL_BACKUP” -f /tmp/backup.log # 写入系统日志 rm -f /tmp/backup.log # 可选:删除临时日志文件 logger -t "TAG":给日志添加标签(方便过滤)。 -f:指定日志文件路径。
  • 推荐方法 1 或 2(简单可靠)。 日志轮转:使用 logrotate 管理日志文件,避免日志过大: # /etc/logrotate.d/mysql_backup /var/log/mysql_backup.log { daily rotate 7 compress missingok notifempty } 在 cron 中记录日志: 0 2 * * * /appdata/mysql_backup_dump.sh > /var/log/mysql_backup.log 2>&1
  • tail -f /var/log/mysql_backup.log # 实时查看日志 或手动运行脚本并检查日志: /appdata/mysql_backup_dump.sh > /var/log/mysql_backup.log 2>&1 cat /var/log/mysql_backup.log
  • 方法 命令 特点 覆盖日志 > log 2>&1 每次运行覆盖旧日志 追加日志 >> log 2>&1 保留历史日志 屏幕+文件 2>&1 | tee -a log 调试时使用 脚本内重定向 exec > log 2>&1 整个脚本生效 系统日志 logger -t TAG -f log 集成到系统日志 选择最适合你的方式即可! 到此这篇关于执行shell 脚本将日志全部输出到文件的多种方法的文章就介绍到这了,更多相关shell脚本日志输出到文件内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Shell执行脚本并输出日志文件的方法 shell脚本按当前日期输出日志的实现 Linux shell脚本输出日志笔记整理(必看篇) shell脚本实现分日志级别输出的方法 shell将脚本输出结果记录到日志文件的实现 输出执行操作和打印日志的shell脚本实例
  • 目录
    • 方法 1:直接重定向(推荐)
    • 方法 2:追加模式(不覆盖旧日志)
    • 方法 3:使用 tee 命令(同时输出到屏幕和文件)
    • 方法 4:在脚本内部重定向
    • 方法 5:使用 logger 写入系统日志
    • 最佳实践
    • 验证日志是否生效
    • 总结

    在执行 Shell 脚本时,如果需要将 所有输出(包括标准输出 stdout 和错误输出 stderr) 重定向到日志文件,可以使用以下方法:

    /appdata/mysql_backup_dump.sh > /var/log/mysql_backup.log 2>&1
    • >:将标准输出(stdout)重定向到 /var/log/mysql_backup.log
    • 2>&1:将错误输出(stderr)合并到标准输出(即也写入日志文件)。
    • 效果:所有输出(包括 echomysqldump 正常信息、错误信息)都会写入日志文件。

    /appdata/mysql_backup_dump.sh >> /var/log/mysql_backup.log 2>&1
    • >>:追加到日志文件(而不是覆盖),适合长期运行的备份任务。

    /appdata/mysql_backup_dump.sh 2>&1 | tee -a /var/log/mysql_backup.log
    • tee -a:将输出 同时显示在终端 并 追加到日志文件(-a 表示追加)。
    • 适用场景:调试时想实时查看输出,同时保留日志。

    如果脚本是自己编写的,可以在脚本开头指定日志文件:

    #!/bin/bash
    exec > /var/log/mysql_backup.log 2>&1  # 所有后续输出都重定向到日志
    echo "Backup started at $(date)"
    # 备份命令(如 mysqldump)
    • exec:重定向整个脚本的输出,包括后续所有命令。

    如果希望日志进入系统日志(如 /var/log/syslog/var/log/messages):

    /appdata/mysql_backup_dump.sh > /tmp/backup.log 2>&1
    logger -t "MySQL_BACKUP" -f /tmp/backup.log  # 写入系统日志
    rm -f /tmp/backup.log  # 可选:删除临时日志文件
    • logger -t "TAG":给日志添加标签(方便过滤)。
    • -f:指定日志文件路径。

    1. 推荐方法 1 或 2(简单可靠)。
    2. 日志轮转:使用 logrotate 管理日志文件,避免日志过大:
      # /etc/logrotate.d/mysql_backup
      /var/log/mysql_backup.log {
          daily
          rotate 7
          compress
          missingok
          notifempty
      }
    3. 在 cron 中记录日志
      0 2 * * * /appdata/mysql_backup_dump.sh > /var/log/mysql_backup.log 2>&1

    tail -f /var/log/mysql_backup.log  # 实时查看日志

    或手动运行脚本并检查日志:

    /appdata/mysql_backup_dump.sh > /var/log/mysql_backup.log 2>&1
    cat /var/log/mysql_backup.log

    方法 命令 特点
    覆盖日志 > log 2>&1 每次运行覆盖旧日志
    追加日志 >> log 2>&1 保留历史日志
    屏幕+文件 2>&1 | tee -a log 调试时使用
    脚本内重定向 exec > log 2>&1 整个脚本生效
    系统日志 logger -t TAG -f log 集成到系统日志

    选择最适合你的方式即可!

    到此这篇关于执行shell 脚本将日志全部输出到文件的多种方法的文章就介绍到这了,更多相关shell脚本日志输出到文件内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • Shell执行脚本并输出日志文件的方法
    • shell脚本按当前日期输出日志的实现
    • Linux shell脚本输出日志笔记整理(必看篇)
    • shell脚本实现分日志级别输出的方法
    • shell将脚本输出结果记录到日志文件的实现
    • 输出执行操作和打印日志的shell脚本实例

    站内搜索