Como posso testar um novo script cron?

14

Eu estou usando algumas distribuições diferentes do Linux (Fedora 11, CentOS 5 e SuSE 10.2) e frequentemente me deparo com um problema em que um novo script que eu quero rodar como um cron funciona bem quando chamado direto do linha de comando, mas falha quando chamado do cron devido a pequenas variações no PATH ou outras variáveis de ambiente necessárias.

Existe uma maneira de testar um script individual como se estivesse sendo executado a partir do cron, sem ter que executar o crontab inteiro ou usar partes de execução para executar o diretório cron.daily / .hourly etc. inteiro? Eu acho que eu poderia editar temporariamente meu crontab para executar o script nos próximos minutos, mas eu prefiro ter uma solução mais independente para que eu não corra o risco de estragar o crontab.

    
por gareth_bowles 13.11.2009 / 20:45

3 respostas

9

De pesquisa do Google em path in crontab

root@pingu # cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Você basicamente deseja definir o PATH e não precisa se preocupar com as variações. Além disso, o teste rápido é executar seu script via SSH em todas as suas caixas usando as mesmas variáveis de ambiente.

    
por 13.11.2009 / 20:48
7

Se eu estiver executando uma tarefa cron planejada individualmente (uma linha separada no crontab), agendarei isso a cada minuto ou a cada minuto enquanto eu estiver testando. Uma vez testado, eu editarei a linha crontab para que ela seja executada na frequência desejada.

Como observação, se eu quiser testar se o próprio cron está funcionando corretamente e enviando os resultados por e-mail para o endereço correto (MUITO importante), adicionarei a seguinte linha ao meu / etc / crontab:

 * * * * * root ls /doesnotexistfoobar

Funciona a cada minuto e tenta fazer um ls em um diretório que não existe. Deve enviar por e-mail uma mensagem de falha a cada minuto. Eu comento a frase quando estou trabalhando.

Voltar para a sua pergunta: Você provavelmente não quer modificar o cron job existente para executar com frequência, tanto porque há uma chance de esquecer de alterá-lo de volta, e porque executar o cron.hourly, cron.daily ou cron .que sempre pode ter efeitos colaterais, dependendo do que você tem lá. Para garantir que você esteja executando o script no mesmo ambiente em que ele será quando chamado pelo cron, recomendamos modificar o truque "ls" acima:

Adicione uma linha ao seu crontab para executar o script diretamente:

 * * * * * root /etc/cron.hourly/customscript

Dessa forma, você pode executá-lo quantas vezes precisar para testá-lo.

    
por 14.11.2009 / 03:34
0

Eu não sei de uma solução mais direta, mas você poderia criar um usuário (crontest) com privs para o seu script, e usar o crontab específico do usuário para o usuário 'crontest' testar o script (s ) editando-o para que o script seja executado nos próximos minutos.

    
por 13.11.2009 / 20:50