como posso fazer com que o cron execute um trabalho agora, para teste / depuração? sem alterar a programação!

134

Eu tenho um trabalho cron que está agendado para ser executado todos os dias, exceto para alterar o agendamento. Existe alguma outra maneira de fazer uma execução de teste do comando agora para ver se funciona como pretendido?

Todos
fonte
Não entendi sua pergunta? Por que não simplesmente executar o comando?
Favadi
21
Eu sei que o comando funciona quando inseri-lo no shell (meu shell), mas quero saber se ele funciona quando o cronexecuta, pode ser afetado pelo ENV ou por itens específicos do shell ( ~expansão) ou por propriedade e permissão ou ...
Ali
2
Então, por que não criar um novo trabalho cron executado a cada minuto com o mesmo comando?
Favadi
13
Foi exatamente isso que acabei fazendo, mas me perguntei se havia uma maneira de dizer ao cron que você deseja executar um teste no trabalho nº 7! Certamente outros já tiveram esse problema / solicitação / desejo antes!
Ali
4
Muito tarde para a cena aqui no google, mas havia tudo errado na resposta de favadi. Ficou claro que ele queria testá-lo no cron e sem editar o crontab especificamente para fazer isso. Muito pior do que alguém dizendo o que você deseja está errado quando eles não tentaram entender o caso de uso.
HörmannHH 13/09

Respostas:

32

Tanto quanto eu sei, não há como fazer isso diretamente, pois o cron tem um propósito especial - executar comandos de horários em um horário específico. Portanto, o melhor é criar manualmente uma entrada crontab ou escrever um script que remova e redefina o ambiente.

Ulrich Dangel
fonte
57

Você pode forçar o crontab a executar com o seguinte comando:

run-parts /etc/cron.daily
Vadim Sluzky
fonte
9
... supondo que o trabalho cron do OP (solicitado há 3 anos) esteja no cron.daily em oposição a um crontab individual.
Jeff Schaller
18
No entanto, isso não simula completamente o ambiente do usuário cron, portanto, é altamente provável que você ainda tenha erros, porque depois de executar seu script como uma tarefa cron real, seu PATH e outros envvars podem ser diferentes do usuário que você fez run-parts /etc/cron.daily. Estou enfrentando esse bug no momento, pois meu script funcionará bem, run-partsmas falhará quando realmente for executado no usuário cron.
ArtHare
42

Você pode simular o ambiente do usuário cron, conforme explicado em "Executando uma Tarefa Cron Manual e Imediata" . Isso permitirá que você teste o trabalho quando ele for executado como o usuário cron.


Trecho do link:


Etapa 1 : coloquei essa linha temporariamente no crontab do usuário:

* * * * *   /usr/bin/env > /home/username/tmp/cron-env

depois retirou-o assim que o arquivo foi gravado.

Etapa 2 : criei um pequeno script bash run-as-cron contendo:

#!/bin/bash
/usr/bin/env -i $(cat /home/username/tmp/cron-env) "$@"

Então, como usuário em questão, eu pude

run-as-cron /the/problematic/script --with arguments --and parameters
Michael Barton
fonte
Truque útil. Obviamente, isso não ajudará se você tiver um sinal de porcentagem no seu comando.
basic6