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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值