terça-feira, 1 de maio de 2018

Rodando vários cron jobs em uma linha

Neste post mostro como executar dois (ou mais) comandos consecutivamente, não simultaneamente, utilizando uma linha do crontab.
Um crontab normalmente executa um comando em cada linha.
Por exemplo:

# m h dom mon dow command
01 00 * * * /usr/sbin/meu_programa1
05 00 * * * /usr/sbin/meu_programa2
00 01 * * * /usr/sbin/meu_programa3
00 02 * * * /usr/sbin/meu_programa4

No exemplo acima mostramos como criar quatro tarefas que são executadas às 00:01, às 00:05, às 01:00 e às 02:00. Contudo imagine que queremos que meu_programa2 seja executado depois de meu_programa1 e meu_programa1 pode durar menos ou um pouco mais de cinco minutos.
Usando a configuração acima, não temos esta garantia. Assim teríamos que alterar a segunda linha para garantir um intervalo maior entre os dois programas.

Em vez disso, posso executar essas tarefas cron uma após a outra, colocando && entre cada tarefa. Assim o nosso exemplo ficaria:

# m h dom mon dow command
01 00 * * * /usr/sbin/meu_programa1 && /usr/sbin/meu_programa2
01 01 * * * /usr/sbin/meu_programa3
01 02 * * * /usr/sbin/meu_programa4

Desta forma as duas primeiras são feitas consecutivamente. Assim que acabar meu_programa1, a segunda tarefa (meu_programa2) é executada.

Isso é útil para situações onde queremos que as tarefas sejam executadas uma depois da outra, ou
(1) porque existe uma dependência entre elas, isto é, a tarefa executada pelo primeiro programa é uma entrada do segundo programa ou
(2) utiliza um recurso de hardware (por exemplo, é muito intensiva em I/O ou gasta muito espaço em disco para executar)  que é importante que a primeira tarefa acabe antes da segunda começar.

Nenhum comentário:

Postar um comentário

Desabilitar ModemManager no Ubuntu

 ModemManager provides a unified, high-level interface to control all kinds of modems: 4G/5G modems (LTE/NR) 3G modems NB-IoT / Cat-M1 modul...