Use o cron para executar um script bash que executa um monte de subcomandos [duplicados]

1

Eu tenho o seguinte script de shell: /var/local/myapp/bin/import

#!/bin/bash

# Move to base directory
cd $(dirname $0)
cd ..

# Execute and bail if one of them fails
cake compile
cake tms:fetch
cake tms:fetch:clean
cake tms:split
cake tms:injest:main
cake tms:injest:schedules

Estou tentando executá-lo no cron. Todos os usuários têm acesso a cake . No entanto, quando executo esse script com o cron, recebo o seguinte erro (em todas as linhas de bolo):

/var/local/myapp/bin/import: line 13: cake: command not found

Aqui está meu crontab

* * * * * /var/local/myapp/bin/import

Além disso, não consigo descobrir uma maneira fácil de redirecionar o stdout de bin / import para um arquivo quando executado a partir do cron. Adicionar > /var/local/myapp/import.log ao final da instrução cron apenas trunca import.log - a única maneira que posso fazer é adicionar exec &> import.log a bin / import, o que não é o que eu quero fazer, porque quando Eu corro com a mão, quero ver a saída na tela.

Tudo funciona perfeitamente quando eu digito /var/local/myapp/bin/import do meu terminal.

    
por Sean Clark Hess 18.07.2010 / 23:03

2 respostas

4

O PATH para cron é diferente daquele para um usuário. Em seu script, especifique o diretório completo para cake , por exemplo:

/path/to/cake compile

Se tudo o que você está recebendo agora são as mensagens de erro, é por isso que o arquivo de saída está truncado. Corrigir o problema do diretório também deve fazer com que isso funcione. Se você também quiser registrar os erros, você pode fazer um destes:

* * * * * /var/local/myapp/bin/import > /var/local/myapp/import.log 2>&1

ou

* * * * * /var/local/myapp/bin/import > /var/local/myapp/import.log 2> /var/local/myapp/error.log

E isso supondo que você quer que seja executado a cada minuto. Se você quer que seja executado a cada hora na meia hora, você faria algo assim:

30 * * * * /var/local/myapp/bin/import > /var/local/myapp/import.log 2>&1
    
por 18.07.2010 / 23:10
1

Como você encontrou, o cron é executado com um ambiente restrito, incluindo o caminho.

Defina o PATH na parte superior do arquivo ou (melhor) especifique o caminho completo / path / to / cake (e / path / to / log).

> > significa anexar a um arquivo.

No seu crontab, você provavelmente deve especificar uma hora ou horários em vez de usar todos os * s.

    
por 18.07.2010 / 23:14

Tags