我是靠谱客的博主 愉快月饼,最近开发中收集的这篇文章主要介绍linux程序输出重定向,linux – 将程序的输出重定向到旋转文件,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我试图将连续运行的程序的输出重定向到文件说error_log.

我使用的命令看起来像这样,myprogram.sh连续生成数据并写入/ var / log / httpd / error_log

> myprogram.sh>>在/ var /日志/的httpd / error_log中

现在我使用logrotate每小时旋转此文件.我在logrotate中使用create命令,以便重命名原始文件并创建一个新文件.

logrotate配置看起来像

/var/log/httpd/error_log {

# copytruncate

create

rotate 4

dateext

missingok

ifempty

.

.

.

}

但是这里的重定向失败了.我想要的是myprogram.sh将数据写入error_log文件而不管它是否被logrotate旋转,显然是新生成的error_log文件

知道如何根据文件名而不是描述符进行重定向工作吗?

要么

在bash中执行此操作的任何其他方式?

解决方法:

如果我理解你的问题,一个解决方案(没有修改myprogram.sh)可能是:

$myprogram.sh | while true; do head -10 >> /var/log/httpd/error_log; done

解释:

> myprogram.sh写入stdout

>我们通过管道将此输出重定向到bash句子.

>虽然true是一个无限循环,永远不会结束,甚至当myprogram.sh结束时应该打破管道.

>在每个循环中,调用head命令将从管道读取的前10行附加到当前/ var / log / httpd / error_log文件的末尾(由于logrotate,可能与最后一个循环不同).

(您可以更改每个循环中写入的行数)

另一种方式是:

$myprogram.sh | while read line; do echo "$line" >> /var/log/httpd/error_log; done

>这与第一个非常相似,但是当myprogram.sh结束或关闭它的stdout时,这会结束循环.

>它逐行工作,而不是行组.

标签:redirect,bash,linux,logrotate

来源: https://codeday.me/bug/20190701/1351689.html

最后

以上就是愉快月饼为你收集整理的linux程序输出重定向,linux – 将程序的输出重定向到旋转文件的全部内容,希望文章能够帮你解决linux程序输出重定向,linux – 将程序的输出重定向到旋转文件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部