- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下问题:
我有一个应用程序,它不断地向 stderr 和 stdout 生成输出。此应用程序的输出被捕获在日志文件中(该应用程序被重定向为:&> log.txt
)。我没有任何选项可以为此生成适当的日志文件。
现在,我有一个 cron 作业,它每小时运行一次,除了做其他事情之外,它还尝试旋转上面的日志文件,将其复制到 log.txt.1,然后创建一个空文件并将其复制到日志.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 的想法
制作命名管道:
mkfifo /dev/mypipe
将 stdout 和 stderr 重定向到命名管道:
&> /dev/mypipe
从 mypipe 读入文件:
cat < /dev/mypipe > /var/log/log.txt &
当需要log-rotate时,kill cat,rotate log,重启cat。
现在,我还没有测试过这个。告诉我们进展如何。
注意:您可以为命名管道指定任何名称,例如/var/tmp/pipe1 、/var/log/pipe 、/tmp/abracadabra 等。只需确保在启动后您的日志脚本运行后重新创建管道即可。
或者,不使用 cat,而是使用一个简单的脚本文件:
#!/bin/bash
while : ; do
read line
printf "%s\n" "$line"
done
此脚本保证每次读取换行符都有一个输出。 (cat 可能直到其缓冲区已满或遇到 EOF 才开始输出)
重要提示:请阅读下面来自 @andrew 的评论。您需要注意几种情况。
好的!终于可以访问我的 Linux 机器了。方法如下:
第 1 步:制作此记录器脚本:
#!/bin/bash
LOGFILE="/path/to/log/file"
SEMAPHORE="/path/to/log/file.semaphore"
while : ; do
read line
while [[ -f $SEMAPHORE ]]; do
sleep 1s
done
printf "%s\n" "$line" >> $LOGFILE
done
第 2 步:将记录器投入工作:
制作命名管道:
mkfifo $PIPENAME
将应用程序的 STDOUT 和 STDERR 重定向到命名管道:
...things... &> $PIPENAME
启动记录器:
/path/to/recorder.sh < $PIPENAME &
您可能想要 nohup
上面的内容使其在注销后仍然存在。
完成!
第 3 步:如果您需要 logrotate,请暂停记录器:
touch /path/to/log/file.semaphore
mv /path/to/log/file /path/to/archive/of/log/file
rm /path/to/log/file.semaphore
我建议将以上步骤放到自己的脚本中。请随意将第 2 行更改为您要使用的任何日志轮换方法。
注意:如果您对 C 编程很得心应手,您可能想编写一个简短的 C 程序来执行 recorder.sh
的功能。 .编译的 C 程序肯定比 nohup-ed 分离的 bash 脚本更轻。
注意 2:David Newcomb 在评论中提供了一个有用的警告:当记录器未运行时,写入管道将阻塞并且 可能 导致程序意外失败。确保记录器关闭(或旋转)的时间尽可能短。
所以,如果你能确保旋转发生真的很快,你可以替换sleep
(一个只接受整数值的内置命令)与 /bin/sleep
(接受浮点值的程序)并将 sleep 时间设置为 0.5
或更短。
关于bash - 使用 Bash 脚本轮换日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5789526/
理想情况下,Logback 可以选择在应用程序启动时始终轮换。由于该功能不存在,我如何强制 logback 在应用程序启动时旋转?由于其供应商代码,我将不得不编写自己的程序 RotateLB.java
我很想知道,当Activity旋转时,ViewModel如何生存,因为它被销毁并再次创建。从逻辑上看,如果负责创建ViewModel的 Activity 被销毁,则ViewModel被销毁。而且,当我
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
我是 JavaScript(和编程)新手,正在努力解决如何在 HTML5 Canvas 中添加旋转的问题。我基本上是试图让一个 JavaScript 对象围绕另一个对象旋转。就我而言,我需要让一颗行星
Azure Storage sample code key 轮换演示了如何使用多个唯一命名的 Secret。但是,在 KeyVault 中,现在可以创建单个 Secret 的多个版本。我看不出为什么不
我试图让选择器在不同的时间轮换,我想我会尝试一个简单的 if/else 语句,让第一个选择器在 3 秒后轮换,接下来的选择器在 30 秒后轮换。然而,它只是每三秒旋转一次。如果我想出了如何完成这项工作
我在显示天气数据(图像、温度和天气描述)的 fragment 中有一个 ListView 。我从 here 获取数据 当我旋转模拟器时,虽然我遇到了崩溃。:(。这是我的代码。我使用 setRetain
如果我对refresh token rotation的理解是对的,那就意味着每次我们请求一个新的access token的时候,我们也会得到一个新的refresh token。如果多次使用刷新 tok
我是这个访问 token 和刷新 token 的新手,如果有任何地方有误,请指正。据我所知,刷新 token 轮换意味着每次用户请求 AT(具有有效 RT)时,都会提供新的 AT1 和 RT1 对。所
在使用 OIDC 服务器进行身份验证的单页应用程序 (JavaScript) 的上下文中,保持 session 事件(在过期后获得更多 token )的标准和推荐方法是使用 HttpOnly Cook
Azure 在此处提供 jwt token 的公钥: https://login.microsoftonline.com/common/discovery/v2.0/keys 这些键是否被轮换和替换?
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我正在尝试为 GCP 服务帐户实现 key 轮换。我已成功创建一个新 key ,然后解码采用 Base64 编码的 privateKeyData,其中包含实际的 SA JSON 文件。现在,当我读回文
来自encryption at rest design document in Github ,只有 Universe Keys 被轮换,而数据 key 在数据文件的生命周期内保持不变。 然而,Yug
我有一个带 mariadb-10.0.21 的 fedora23 安装,它已经运行了大约一个月,并且有几十个格式为 hostname-relay-bin.00005、hostname-relay-bi
我的应用程序在 apache tomcat 上运行。我想为 apache 创建的日志配置 logrotate。 我的logrotate配置如下: /var/company/apache-tomcat/
我使用以下命令启动 mesos 主容器: ExecStart=/usr/bin/docker run --rm \ -e MESOS_HOSTNAME={{ ansible_hostname
有一个带有自定义 SecurityManager 的 Flask-Appbuilder 应用程序,用于查找从浏览器获取的用户 token 。我们在应用程序启动时获取客户端凭据。在凭证轮换之前它都可以正
我有以下要求。 通过 terraform 轮换存储帐户访问 key (primary_access_key 和 secondary_access_key)。 将新生成的 key 作为新版本添加到在 k
我正在尝试构建一个跨浏览器矢量应用程序,为此我对 IE7 和 IE8 使用 VML 而不是 SVG。 我正在尝试弄清楚如何旋转 VML 组元素,并让它在纯 VML 中工作,但是一旦我合并 Raphae
我是一名优秀的程序员,十分优秀!