O script Bash não funciona como cronjob

3

Estou tentando fazer com que esse script simples funcione em um cronjob. É usado para gerar páginas estáticas de estatísticas do servidor nginx usando o GoAccess.

Eu tentei tudo o que sei para resolver esse problema, ele não funcionará como um cronjob. É executado perfeitamente no console. Está até funcionando como cronjob quando eu removo a chamada para goaccess (por exemplo, coloque um eco lá para ver se a chamada foi construída corretamente).

Qualquer ajuda sobre isso? O script é executado para cada arquivo, mas os arquivos resultantes contêm apenas as instruções "como usar" do goaccess, que aparecem quando você o chama sem argumentos.

O System é um vServer rodando o Debian 6.0. Eu uso o GoAccess 0.5 e o nginx 1.2.1

Aqui está o script:

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

_logdir="/srv/www/logs"
_logfiles="${_logdir}/access_*.log"

for logfile in $_logfiles; do
        _curfilename="${logfile##*/}"
        # All these commands work flawless
        #echo "$logfile" >> /home/debug.log
        #echo "$_curfilename" >> /home/debug.log
        #echo "goaccess -a -f $logfile > /srv/www/stats/${_curfilename}.html" >> /home/debug.log;

        # This one fails
        goaccess -a -f "${logfile}" > "/srv/www/stats/${_curfilename}.html";
done

Aqui está a linha crontab para uma vez por hora (eu usei * * * * * para depurar):

0 * * * * /bin/bash /home/run_webstats_update.sh

Saída de erro no cron.log:

/USR/SBIN/CRON[26099]: (root) CMD (/bin/bash /home/update_webstats.sh)
/USR/SBIN/CRON[26098]: (CRON) error (grandchild #26099 failed with exit status 1)
    
por Manuel 22.06.2012 / 20:31

2 respostas

1

Isso deve ser feito. Apenas certifique-se de ter os caminhos certos. BTW, o GoAccess é bacana.

#!/bin/bash
PATH=$PATH:/home/

_logdir="/srv/www/logs"
_logfiles="${_logdir}/access_*.log"

for logfile in $_logfiles; do
   _curfilename="${logfile##*/}"
   cat "${logfile}" | goaccess -a > "/srv/www/stats/${_curfilename}.html"
done

Você pode até mesmo analisar arquivos de dados compactados:

zcat -f access.log* | goaccess -a > "/srv/www/stats/${_curfilename}.html"

    
por 23.06.2012 / 04:36
1

O que é o goaccess? não é um comando padrão nem uma função que você já definiu, você precisa declará-lo no começo ou fonte do arquivo que tem a função

    
por 23.06.2012 / 04:12