Como posso testar um novo script cron?

14

Estou executando em algumas distros diferentes do Linux (Fedora 11, CentOS 5 e SuSE 10.2) e frequentemente encontro um problema em que um novo script que eu quero executar como um trabalho cron funciona bem quando chamado diretamente na linha de comando, mas falha quando chamado do cron devido a pequenas variações no PATH ou em outras variáveis ​​de ambiente necessárias.

Existe uma maneira de testar a execução de um script individual como se estivesse sendo executado no cron, sem precisar executar o crontab inteiro ou usar run-parts para executar o diretório cron.daily / .hourly etc. inteiro? Acho que posso editar temporariamente meu crontab para executar o script nos próximos minutos, mas prefiro ter uma solução mais autônoma para não arriscar estragar o crontab.

gareth_bowles
fonte

Respostas:

9

Na pesquisa do Google empath 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.

Jeremy L
fonte
Obrigado, eu não tinha pensado que um crontab é como um script, pois você pode declarar variáveis ​​de ambiente dentro do crontab.
14115 gareth_bowles
7

Se eu estiver executando um trabalho cron agendado individualmente (uma linha separada no crontab), eu o agendarei para cada minuto ou outro momento enquanto o estiver testando. Depois de testado, editarei a linha crontab para que funcione na frequência que desejo.

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

 * * * * * root ls /doesnotexistfoobar

Executa a cada minuto e tenta fazer um lsem um diretório que não existe. Deve enviar uma mensagem de falha a cada minuto. Eu comento a linha quando a trabalho.

Voltando à sua pergunta: você provavelmente não deseja modificar o trabalho cron existente para que seja executado com freqüência, tanto porque há uma chance de esquecer de alterá-lo novamente, quanto porque executando seu cron.hourly, cron.daily ou cron. 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á chamado quando for chamado do cron, recomendo modificar meu 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 for necessário para testá-lo.

Schof
fonte
Obrigado - se eu pudesse votar nessa como a resposta correta também, eu faria!
21430 Gareth_bowles #
0

Não conheço uma solução mais direta, mas você pode criar um usuário (digamos, crontest) com privs no seu script e usar o crontab específico do usuário para o usuário 'crontest' para testar o script editando para que o script seja executado nos próximos dois minutos.

kingfish
fonte