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?


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.


57

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

run-parts /etc/cron.daily

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

Truque útil. Obviamente, isso não ajudará se você tiver um sinal de porcentagem no seu comando.
basic6
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.