Salve apenas uma saída específica para o arquivo de log

3

Estou usando unison para sincronizar dados para um servidor e recentemente criei um cronjob para isso. O cronjob está sendo executado na inicialização e salva a saída em um arquivo de log. (informação adicional abaixo).

O problema que estou tendo é que o uníssono tem bastante saída, e gostaria de salvar apenas o resumo no arquivo de log. Existe uma maneira de fazer isso? Eu não encontrei uma maneira de tornar uníssono menos verboso, então eu pensei que talvez a saída pudesse ser filtrada de alguma forma - eu simplesmente não saberia como.

Obrigado!

Informação adicional:

Neste momento, o arquivo de log acaba ficando assim:

Contacting server...
Connected [//theserver//share/HDA_DATA/elrudi -> //thelaptop//home/elrudi]
Looking for changes
\ syncAll/Code/Aptana/T...avascript library code assist.txt

\ syncAll/Code/develope...nk/20070607 contacten (INDEX).xls

\ syncAll/Code/sourcefi...okexport/photos/10152112061815397

| syncAll/Code/Python/d...rawable-hdpi/ic_action_search.png

(... many many lines ...)

| syncAll/Work/2008_10 ...profile/StandardLastprofil_H0.xls

| syncAll/Work/2008_10 ...n/Load Profiles/Lastprofil_H0.xls

Waiting for changes from server
Reconciling changes
changed  ---->            syncAll/scriptfile1.sh 
Propagating updates
UNISON 2.40.102 started propagating changes at 12:07:31.55 on 07 Oct 2015
[BGN] Updating file syncAll/scriptfile1.sh from /home/elrudi to //theserver//share/HDA_DATA/elrudi
100%  00:00 ETA

[END] Updating file syncAll/scriptfile1.sh
100%  00:00 ETA

UNISON 2.40.102 finished propagating changes at 12:07:31.61 on 07 Oct 2015
100%  00:00 ETA

Saving synchronizer state
Synchronization complete at 12:07:36  (1 item transferred, 0 skipped, 0 failed)

Eu gostaria de abandonar as linhas que começam com | , / , - ou \ (a barra giratória indicando que um processo ainda não está concluído).

Mais informações adicionais: crontab -e shows

@reboot /home/elrudi/sync.sh -batch 60 >> /home/elrudi/.cronjobs.log 2>&1   

O script sync.sh verifica se o servidor está acessível localmente ou remotamente e executa o comando unison apropriado. O parâmetro -batch é adicionado para tornar unison executado sem a entrada do usuário e 60 é um tempo de espera (para garantir que unison não seja executado antes que uma conexão esteja disponível).

    
por ElRudi 07.10.2015 / 12:30

1 resposta

6

Quando você chamar unison em seu script sync.sh , faça o seguinte:

unison ... 2>&1 | grep -vE '^[\|/-]|^$'

Isso removerá ( -v ) todas as linhas que corresponderem à expressão normal: todas as linhas que começam com um desses caracteres: \|/- ou linhas vazias completas ( ^$ ).

Editar : Se você quiser que o cronjob seja filtrado, use:

@reboot /path/to/sync.sh -batch 60 2>&1 | grep -vE '^[\|/-]|^$' >> /path/to/logfile
    
por chaos 07.10.2015 / 12:56