Existe uma maneira de dizer ao cron para acionar uma tarefa cron agora?

3

A tarefa cron para o updatedb não foi executada porque o sistema estava desligado no momento. Gostaria de dizer ao cron para executar esse trabalho agora, como se agora fosse o horário do agendamento. Existe uma maneira de fazer isso?

Para este trabalho não quero executá-lo em primeiro plano porque não quero mantê-lo aberto e não quero executá-lo em uma tela porque não quero ter que limpar mais tarde. Em muitas outras ocasiões, seria útil fazer a mesma coisa para testar se um trabalho seria executado corretamente no ambiente fornecido pelo cron.

    
por ShadSterling 30.07.2014 / 16:42

4 respostas

1

O ambiente usado pelo cron é definido em / etc / crontab

Você pode executar seu comando usando esse arquivo para configurar o ambiente, por exemplo:

env - 'cat /etc/crontab | grep -v "#" | grep -v "^$" | grep -v /etc/cron' your_script_name.sh

Isso retira os comentários (linhas iniciando com #), linhas em branco (correspondência regex: ^ $) e as próprias entradas crontab do sistema, deixando apenas as variáveis de ambiente. Essas variáveis são usadas para executar seu script em um ambiente modificado por meio do comando "env".

Se você quiser analisar o processo, faça isso com nohup:

nohup 'env - 'cat /etc/crontab | grep -v "#" | grep -v "^$" | grep -v /etc/cron' your_script_name.sh' &

Solução retirada de: link

    
por 30.07.2014 / 19:52
1

E sobre

nohup updatedb &

executado em um terminal (xterm ou console)?

    
por 30.07.2014 / 16:53
0

Eu criei um script Bash uma vez com lógica para execuções manuais para testes e execuções perdidas conhecidas. Ele utilizava a existência de arquivos simples para funcionar, como o contrário de um arquivo LOCK.

Para fazer isso funcionar, o script consistia em duas seções ou rotinas. Nosso cron foi projetado para ser executado a cada doze horas ao meio-dia ou meio dia, no entanto, você pode aplicar essa lógica a qualquer horário.

A seção A do código, marcada para Noon ou meia-noite e se foi, tocou em um arquivo: touch ./RUNCRON

Seção B do código, verificado pela existência de ./RUNCRON . O código do nosso cron job original foi então inserido como o corpo THEN do FI, como uma última instrução removemos o arquivo ./RUNCRON

O novo trabalho cron foi configurado para executar a cada minuto, em vez de a cada 12 horas. Para acionar uma execução manual, tudo o que precisávamos fazer era touch ~/path/to/RUNCRON

    
por 30.07.2014 / 17:46
0

Você pode usar at para executar comandos de maneira não interativa:

at now + 1 min
at> /command/to/run
at> ^D
job 2 at Wed Jul 30 14:27:00 2014

"now + 1 min" significa executar o comando em um minuto no futuro. at solicitará o (s) comando (s) a executar; aperte Cntrl-D quando terminar. at executará o (s) comando (s) no mesmo diretório atual e com as mesmas variáveis de ambiente da sua sessão interativa.

    
por 30.07.2014 / 20:30

Tags