egrep não está funcionando no crontab

2

Eu tenho um script bash simples que funciona bem quando executado na linha de comando, mas não no crontab:

#!/bin/bash
PATH=/usr/bin:/bin

for f in /data/home/cwolff/tmp/*access_log*.txt;
do
egrep "r:[A-Z]+ \S+[^\.\s]{5} " $f >> $f.min
done

Quando executado no crontab, ele exibe arquivos * .min vazios. Eu li sobre algum personagem como% precisa ser escapado no crontab, mas não estou usando nenhum deles.

    
por rontron 03.02.2012 / 09:51

2 respostas

3

Tenha cuidado com intervalos como [A-Z] , pois o significado disso depende da localidade. Pode ser [ABC...] , mas também pode ser [AaBbCc...] . [:upper:] está bem definido.

Então, minha melhor aposta seria verificar o ambiente no seu shell de login vs cron, especialmente LC_ALL, LC_COLLATE, LC_CTYPE, LANG .

    
por 03.02.2012 / 11:08
1

Isso pode ser causado por permissões.

Você veria exatamente esse comportamento se tiver permissão para ler todos os arquivos em /data/home/cwolff/tmp/*access_log*.txt , mas o usuário cujo crontab você está usando não faz isso.

Este também será o caso se /data for montado usando o NFS sem a opção no_root_squash e se o crontab for da raiz.

Erros de trabalhos agendados geralmente são enviados para o usuário em questão. Se você não gastou tempo configurando sua configuração de e-mail, provavelmente eles estão em /var/spool/mail/user .

    
por 03.02.2012 / 11:22

Tags