logrotate压缩参数

我一直在使用cstream很多事情,例如为了减lessmysqldump对驱动器的影响。 不过,我总是通过直接从脚本或cronjob调用二进制文件来完成此操作。

我现在有一种情况,如果我可以使用logrotate cstream ,但是经过一些试验,我无法得到它的工作。

你可以用两种不同的方式使用cstream

更确切地说,我想从compresscmd选项中调用cstream

现在我只是在logrotateconfiguration文件中使用这个。

 compresscmd /bin/gzip compressoptions -9 

但就像我说的,我想用类似的东西

 compresscmd cstream foo | gzip 

那可能吗? 我可以使用logrotateconfiguration文件中的variables/macros,以便我可以传递文件的信息压缩到cstream

另外,我尝试使用带有脚本的compresscmd来打印脚本收到的参数,但是我只看到一个参数值为= -9

所以,实际上我不知道gzip是如何获取这些信息的。 它是否只能从logrotate获得一些bash env值?

我看了一下logrotate的文档,但是我看不出有什么答案。

任何人都可以对此有所了解吗?

看起来像logrotatepipe道压缩cmd,所以你需要写一个脚本,可以处理pipe道。 我确信perl / python可以提供一个更优雅的解决scheme,但是这里是我能够在bash中拼凑起来的东西:

 compresscmd /root/mycompress.bash 

mycompress.bash:

  #!/bin/bash ## set the field separator to NULL IFS='' ## read the pipe into an array ARRAY=() while read LINE do ARRAY+=($LINE) done ## echo the array and pipe to desired commands for item in ${ARRAY[*]} do echo $item done | cstream | gzip -9 

更新:

经过反思,使用数组临时存储是不必要的,所以上面的代码可以简化为:

  #!/bin/bash ## set the field separator to NULL IFS='' while read LINE do echo $LINE done | cstream 

经过进一步的反思,因为cstream自己处理pipe道就好了,mycompress.bash可以简化为:

  #!/bin/bash cstream | gzip