使用 Bash 脚本进行日志轮换

2024-03-31

我有以下问题:

我有一个应用程序,它不断地向 stderr 和 stdout 生成输出。该应用程序的输出被捕获在日志文件中(该应用程序被重定向为:&> log.txt)。我没有任何选项来为此生成适当的日志记录。

现在,我有一个 cron 作业,它每小时运行一次,除了做其他事情之外,它还尝试通过将其复制到 log.txt.1 来轮换上面的日志文件,然后创建一个空文件并将其复制到 log.txt

看起来像:

cp log.txt log.txt.1
touch /tmp/empty
cp /tmp/empty log.txt

问题是,应用程序仍在写入它,因此我在 log.txt.1 中得到一些非常奇怪的东西,它以很多垃圾字符开头,而实际的日志文件位于末尾的某个地方。

您是否知道如何针对这种特定情况进行正确的日志旋转(我也尝试过cat log.txt > log.txt.1,不起作用)?使用logrotate对于这个特定的应用程序来说不是一个选项,幕后有一个我可能不会改变的完整机制。

谢谢, F。


好的,这是一个想法,灵感来自http://en.wikibooks.org/wiki/Bourne_Shell_Scripting/Files_and_streams http://en.wikibooks.org/wiki/Bourne_Shell_Scripting/Files_and_streams

  1. 制作一个命名管道:

    mkfifo /dev/mypipe
    
  2. 将 stdout 和 stderr 重定向到命名管道:

    &> /dev/mypipe
    
  3. 从 mypipe 读入文件:

    cat < /dev/mypipe > /var/log/log.txt &
    
  4. 当您需要日志轮换时,杀死猫,轮换日志,然后重新启动猫。

现在,我还没有测试过这个。告诉我们进展如何。

注意:您可以为命名管道指定任何名称,例如 /var/tmp/pipe1 、 /var/log/pipe 、 /tmp/abracadabra 等。只需确保在启动后重新创建管道before您的日志记录脚本运行。


或者,不要使用 cat,而使用一个简单的脚本文件:

#!/bin/bash

while : ; do
  read line
  printf "%s\n" "$line"
done

该脚本保证每个换行符读取都有一个输出。 (cat 可能不会开始输出,直到其缓冲区已满或遇到 EOF)


最终的——并且经过测试的——尝试

重要的提示:请阅读以下评论@andrew以下。有几种情况您需要注意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Bash 脚本进行日志轮换 的相关文章

  • 如何使用我在 github 中发布的 bash 脚本执行 chsh?

    我有一个要点 我总是用它来在新服务器上安装我需要的软件包 http gist github com 4372049 http gist github com 4372049 我需要做的就是通过 ssh 在新服务器中输入以下内容 bash c
  • 如何在 python 日志记录中插入换行符?

    import logging logging basicConfig level logging DEBUG format asctime s levelname s message s datefmt H M S logging info
  • 如何在 Python 中的函数入口、内部和退出处进行日志记录

    我希望能够使用 Python 日志记录工具在我的代码中进行简单且一致的日志记录 我能够执行以下操作 我希望所有现有 未来的模块和函数都有 输入 和 完成 日志消息 我不想添加相同的代码片段来定义日志记录参数 如下所示don t want t
  • 有一种简单的方法可以忽略时间戳来区分日志文件吗?

    我需要比较两个日志文件 但忽略每行的时间戳部分 确切地说是前 12 个字符 有没有一个好的工具 或者一个聪明的 awk 命令 可以帮助我 根据您使用的 shell 您可以改变方法 Blair https stackoverflow com
  • Elasticsearch 无法写入日志文件

    我想激活 elasticsearch 的日志 当我运行 elasticsearch 二进制文件时 我意识到我在日志记录方面遇到问题 无法加载配置 这是输出 sudo usr share elasticsearch bin elasticse
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1
  • 是否可以通过编程方式查找 logback 日志文件?

    自动附加日志文件以支持电子邮件会很有用 我可以以编程方式设置路径 如以编程方式设置 Logback Appender 路径 https stackoverflow com questions 3803184 setting logback
  • python 日志记录会刷新每个日志吗?

    当我使用标准模块将日志写入文件时logging 每个日志会分别刷新到磁盘吗 例如 下面的代码会将日志刷新 10 次吗 logging basicConfig level logging DEBUG filename debug log fo
  • 使用 NLog .NET Core 将日志记录到 PostgreSQL DB

    我尝试将日志记录集成到 NET Core 中的数据库 我能够设置 NLog 并将消息记录到 SQL Server 这很容易 但是当我尝试将 DB 切换到 PostgreSQL 时 似乎没有记录任何内容 以下是startup cs中的代码 p
  • 根据 .NET Core 2.1 中的更改重新加载 Serilog JSON 配置

    我目前正在开发 ASP NET Core 2 1 应用程序 并使用 Serilog 进行日志记录 我想在运行时为我的 Serilog 实现重新加载应用程序设置文件 我的目标是在运行时更改日志级别 例如我写入minimumLevelDebug
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • Heroku Rails 应用程序级别不记录日志

    我在 Heroku 上有一个 Rails 应用程序 它没有在应用程序级别进行日志记录 当前版本 红宝石1 9 3 导轨3 1 3 在 config environment development rb 中有以下几行 config logge
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • OSX bash 最小化窗口

    在 Mac 中并使用 bash shell 我想执行一个包含单个命令 启动 Jupyter Lab 的文件并立即最小化终端窗口 有没有办法在不安装第三方软件的情况下做到这一点 是的 只需使用osascript https ss64 com
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • Git difftool 未启动外部 DiffMerge 程序

    我一直遵循 戴夫的博客条目 http www davesquared net 2009 05 setting up git difftool on windows html 链接在此answer https stackoverflow co
  • 动态参数值取决于另一个动态参数值

    启动前提 非常严格的环境 Windows 7 SP1 Powershell 3 0 使用外部库的可能性有限或不可能 我正在尝试重写之前创建的 bash 工具 这次使用 PowerShell 在 bash 中 我实现了自动完成功能 以使该工具
  • 在 bash 脚本中提取 XML 值 [重复]

    这个问题在这里已经有答案了 我正在尝试从 xml 文档中提取一个值 该文档已作为变量读入我的脚本中 原始变量 data is
  • 使用 su 和 Expect 脚本登录用户时遇到问题

    我正在为一个班级制作一个网站 您可以使用用户名和密码登录 然后它会将您带到一个显示您在班级中的成绩的页面 该网站正在运行bash脚本 https github com jduga002 rapache 并将托管在用户已有用户名和密码登录的计
  • 使用 python 进行串行数据记录

    Intro 我需要编写一个小程序来实时读取串行数据并将其写入文本文件 我在读取数据方面取得了一些进展 但尚未成功地将这些信息存储在新文件中 这是我的代码 from future import print function import se

随机推荐

  • ggplot:向整个图层添加 alpha 值

    我正在尝试将一些箱线图绘制为半透明 当我设置alpha值 仅调整填充透明度 而不调整边框 描边 颜色 知道如何使整个几何层透明吗 library ggplot2 ggplot mtcars aes factor cyl mpg geom b
  • 具有更高种类类型的 GADT 类型推断

    我有一些可以编译的代码 LANGUAGE ScopedTypeVariables KindSignatures GADTs FlexibleContexts module Foo where data Foo gt where Foo c
  • 在 MAC 上编译 SDL

    include ffmpeg libavcodec avcodec h include ffmpeg libavformat avformat h include ffmpeg libswscale swscale h include ff
  • Android Webview - 返回应用程序时防止重新加载

    当您返回应用程序时 如何防止在 webview 上重新加载 当点击主页键然后返回应用程序时 网络视图被重新加载 我不想要这种行为 我希望用户查看他们访问的上一页 无需重新加载 private WebView webView Override
  • ggplotly 和 geom_area :将鼠标悬停在区域(而不是点)上时显示信息

    当涉及到绘图时 将鼠标悬停在特定点上时很容易显示信息 这段代码完成了这项工作 toy df data frame t c seq 1 10 seq 1 10 value c runif 10 0 10 2 runif 10 0 10 eve
  • Outlook 宏在因错误而失败之前运行了 250 次迭代

    描述 我有一个 Outlook 宏 它循环浏览文件夹中选定的电子邮件并将一些信息写入 csv 文件 在失败之前 它一直可以完美地工作到 250 这是一些代码 Open strSaveAsFilename For Append As 1 Co
  • 在同一页面上同时使用 highcharts 和 highstock

    希望有人能帮忙 我尝试在单个页面上使用 highcharts 和 highstock 从 CDN 加载 最初我设置了各种 highcharts 带向下钻取的仪表和条形图 并使用以下所有内容都工作正常
  • HTML div 元素不采用其父级的高度,即使父级具有非零高度

    我有一个相当简单的问题 我有一个包含三个孩子的容器 div 两个 div 和一张桌子 以下是CSS container overflow auto child1 float left width 50px height 100 table1
  • Java - 使用分隔符分隔不同参数来解析文本

    如何使用多个分隔符或单个分隔符来检测和分隔不同的字符串匹配项 例如 我使用Scanner解析以下字符串 MrsMarple new Person MrsMarple age 30 我想分离出这个字符串来按顺序确定何时创建新人以及何时设置他们
  • jQuery(document).width() 不包括可视区域之外的宽度

    jQuery document width 不包括总宽度 可见宽度 当有水平条时可见宽度之外 它等于jQuery window width 我想jQuery window width 是可视区域宽度 jQuery document widt
  • ASP.NET Core 2.1 MVC 使用 XMLHttpRequest 将数据从 JavaScript 发送到 Action 方法

    这与下面类似 但没有 Ajax 我正在使用 JavaScript 和 XMLHttpRequest AJAX post数据到达ASP NET Core 2 1控制器时为空 https stackoverflow com questions
  • 何时使用单元测试? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 旋转呈现视图并锁定呈现视图控制器的方向

    我正在开发仅支持横向方向的iPad应用程序 我希望允许一些呈现的视图控制器支持所有方向 而不改变呈现视图控制器的方向 支持 Xcode 设置中除倒置之外的所有方向 我用来呈现视图控制器的代码 ViewController vc self s
  • 需要在 Mac 上安装 Ruby 2.7.2 的帮助

    我正在尝试在我的 Mac 具有所有更新的最新操作系统 上安装 Ruby 版本 2 7 2 并执行以下操作 brew update brew upgrade rbenv ruby build and then rbenv install 2
  • C++11 虚拟析构函数和移动特殊函数的自动生成

    C 11 中自动生成特殊移动函数 构造函数和赋值运算符 的规则指定不能声明析构函数 逻辑大概是 如果你需要在破坏方面做一些特殊的事情 那么这一举动可能不安全 然而 为了在多态性中正确调用析构函数 有必要将基类的析构函数声明为虚拟 否则通过基
  • AngularJS 的配置阶段

    引导 Angular 应用程序的配置阶段发生了什么 无法想象 现在我对提供商感到困惑 SO 可能是配置阶段的洞察力帮助我理解整个过程 因为提供程序可以在配置阶段注入 Thanks 角度应用程序使用服务 http location ETC 有
  • 申请账户信息不正确

    验证应用程序时出现此错误 重新启动 Xcode 和 Mac 机器后 苹果修复了导致问题的任何原因 问题似乎已经解决 在 OS 10 9 5 上通过 iTunes Producer 3 1 成功交付包
  • hql 中分区的 row_number()

    hql 中分区上的 row number 相当于什么 我在 hql 中有以下查询 select s Companyname p Productname sum od Unitprice od Quantity od Discount as
  • 恢复到 nvm 默认版本

    每当我使用 cd 时 我总是得到 Reverting to nvm default version N A version default gt N A is not yet installed You need to run nvm in
  • 使用 Bash 脚本进行日志轮换

    我有以下问题 我有一个应用程序 它不断地向 stderr 和 stdout 生成输出 该应用程序的输出被捕获在日志文件中 该应用程序被重定向为 gt log txt 我没有任何选项来为此生成适当的日志记录 现在 我有一个 cron 作业 它