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

 更新时间:2025年07月17日 09:16:33   作者:liuyunshengsir  
执行Shell脚本时,可将所有输出(stdout+stderr)重定向到日志文件,方法包括直接重定向(> 2>&1)、追加模式(>>)、tee命令(屏幕+文件)、脚本内重定向(exec)及logger系统日志,推荐方法1或2,结合logrotate管理日志大小

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

方法 1:直接重定向(推荐)

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

方法 2:追加模式(不覆盖旧日志)

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

方法 3:使用 tee 命令(同时输出到屏幕和文件)

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

方法 4:在脚本内部重定向

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

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

方法 5:使用 logger 写入系统日志

如果希望日志进入系统日志(如 /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脚本日志输出到文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用find命令快速定位配置文件位置

    使用find命令快速定位配置文件位置

    大家知道在配置的时候咱们经常需要修改配置文件,甚至现在的开发就是配配配,记又记不住,每次自己查找太费时间,最近学会了一个命令-find,现在分享以下,本文以nginx为例子给大家详细介绍,对find命令定位配置文件位置相关知识感兴趣的朋友一起看看吧
    2022-12-12
  • Linux中的命令连接符详解

    Linux中的命令连接符详解

    Linux中执行多条命令的方法包括分号(顺序执行)、&&(前成功则执行)、||(前失败则执行),组合时&&优先级高于||,可控制执行流程,在ssh中也可使用这些连接符执行远程命令,本文给大家介绍Linux中的命令连接符,感兴趣的朋友一起看看吧
    2025-07-07
  • Shell脚本实现SSL证书过期巡检

    Shell脚本实现SSL证书过期巡检

    我们知道 SSL 证书是会过期的,一旦过期之后需要重新申请,如果没有及时更换证书的话,就有可能导致网站出问题,所以本文分享一个自动检测 SSL 是否过期的 shell 脚本吧
    2023-08-08
  • Linux中执行shell脚本的4种方法总结

    Linux中执行shell脚本的4种方法总结

    这篇文章主要介绍了Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法,需要的朋友可以参考下
    2014-08-08
  • Linux下使用nextcloud搭建个人网盘代码实例

    Linux下使用nextcloud搭建个人网盘代码实例

    这篇文章主要介绍了Linux下使用nextcloud搭建个人网盘代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • linux shell将变量拼接到命令中

    linux shell将变量拼接到命令中

    本文主要介绍了linux shell将变量拼接到命令中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Linux命令之systemctl用法详解

    Linux命令之systemctl用法详解

    Linux 服务管理两种方式service和systemctl,systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动,本文给大家详细讲解了Linux systemctl命令用法,需要的朋友可以参考下
    2024-03-03
  • Linux中Shell脚本判断文件/文件夹是否存在方法

    Linux中Shell脚本判断文件/文件夹是否存在方法

    很多时候我们在做运维的时候,我们需要做一些自动化,这时我们就需要写一些shell脚本,既然要用到shell脚本,就免不了文件操作,这篇文章主要给大家介绍了关于Linux中Shell脚本判断文件/文件夹是否存在的相关资料,需要的朋友可以参考下
    2023-06-06
  • 详解Linux 操作系统下安装rpm包的方法步骤

    详解Linux 操作系统下安装rpm包的方法步骤

    这篇文章主要介绍了详解Linux 操作系统下安装rpm包的方法步骤的相关资料,需要的朋友可以参考下
    2015-11-11
  • 隐藏shell脚本内容的工具 shc详解

    隐藏shell脚本内容的工具 shc详解

    本文主要介绍了隐藏shell脚本内容的工具 shc, 虽然它加密的安全性不高,但是我们平常可以把它作为一个shell脚本代码隐藏和混淆工具来使用,对shell脚本隐藏相关知识感兴趣的朋友一起看看吧
    2021-11-11

最新评论