parâmetros de compactação logrotate

2

Estou usando cstream há um bom tempo para muitas coisas, por exemplo, para reduzir o impacto que mysqldump tem nos discos. No entanto, sempre fiz isso chamando o binário diretamente de um script ou de um cronjob.

Eu tenho uma situação agora em que seria ótimo se eu pudesse usar cstream de logrotate , mas depois de algumas tentativas, não consigo trabalhar.

Você pode usar cstream de duas maneiras diferentes:

  • como um "gato" binário

    cstream foo | gzip

  • como um pipe de outro processo

    mysqldump foo | cstream > dump.sql

Mais precisamente, gostaria de chamar cstream da opção compresscmd .

Agora eu uso isso em logrotate config files.

compresscmd /bin/gzip
compressoptions -9

mas, como eu disse, gostaria de usar algo como

compresscmd cstream foo | gzip

Isso é possível? Posso usar variáveis / macros de logrotate config arquivos para que eu possa passar as informações do arquivo para compactar para cstream ?

Além disso, tentei usar compresscmd com um script de shell para imprimir os argumentos que o script recebe, mas só vi um argumento com valor = -9

Então, na verdade eu não sei como gzip pega essa informação. É de algum valor bash env disponível apenas a partir de logrotate ?

Eu dei uma olhada na documentação de logrotate , mas não vejo nenhuma resposta para minhas dúvidas.

Alguém pode lançar alguma luz sobre isso?

    
por john fish 31.07.2015 / 20:54

1 resposta

1

Parece que o logrotate está canalizando para o compresscmd, então você precisará escrever um script que possa manipular o pipe. Tenho certeza de que o perl / python poderia fornecer uma solução mais elegante, mas aqui está o que eu consegui preparar no bash:

com

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

atualização:

Após a reflexão, o uso de uma matriz para armazenamento temporário é desnecessário, portanto, o código acima pode ser reduzido para:

    #!/bin/bash

    ## set the field separator to NULL
    IFS=''

    while read LINE
    do
            echo $LINE
    done | cstream

após reflexão adicional, porque o cstream manipula os pipes muito bem por si próprio, o mycompress.bash pode ser reduzido para:

    #!/bin/bash

    cstream | gzip
    
por 02.08.2015 / 22:09