Cron Job - Django

 A parte principal de um cron é sua sintaxe de tempo, que define a programação na qual o trabalho deve ser executado periodicamente.


Consiste em cinco partes ordenadas, ou seja, começando do minuto até a definição do dia da semana.

  1. Minuto (0 - 59)
  2. Hora (0 - 23)
  3. Dia do mês (1 - 31)
  4. Mês (1 - 12)
  5. Dia da semana (0 - 6)
A sintaxe mais simplificada para um cron pode ser vista como

* * * * * [trabalho]
Para cada campo, usamos um asterisco (*) que indica todos os números possíveis para uma posição. O cron job acima está programado para ser executado a cada minuto. Vamos ver mais alguns exemplos para entender melhor

2 * * * * [trabalho]
A definição de tempo acima implica que o trabalho está programado para ser executado a 2 minutos de cada hora, ou seja, 00:02, 01:02, 02:02, 03:02 etc.

10 8 * * * [trabalho]
A sintaxe acima corresponde ao cronograma de trabalho às 8:10 de cada dia

* / 2 * * 3 * [trabalho]
Agora, isso é algo diferente. Aqui, usamos o operador “/” (divisão). Você pode notar que eu dividi o valor do minuto por 2, ou seja, eu quero que o cron job seja executado a cada 2 minutos,mas também defini o valor do mês como 3, o que implica que o job acima está agendado para ser executado a cada 2 minutos de 3º mês para todas as horas e para todos os dias.

Assim como “/”, alguns outros símbolos também são usados para tornar um cron job mais específico. Por exemplo, “,” (vírgula) é usado para definir vários valores para o mesmo campo. Vamos ver um exemplo disso também

2,4,6 * * * * [trabalho]
O trabalho acima será executado três vezes a cada hora no 2º, 4º e 6º minuto.

Da mesma forma, “-“ (traço) pode ser usado para definir a faixa de valores de um campo. Por exemplo

0 6-8 * * * [trabalho]
O trabalho acima será executado uma vez a cada hora, entre 6h00 e 8h00, todos os dias.

Caracteres especiais e suas funções
Em meio a uma instrução do Crontab é comum que o usuário se depare com alguns caracteres / símbolos que têm funções específicas, como asterisco (*), vírgula (,), hífen (-) e barra (/). Vejamos o que eles significam.

Asterisco
O asterisco serve para especificar que todos os valores do campo serão validados. Vamos supor que um determinado comando tenha de ser executado diariamente durante o mês; para configurar o Crontab, basta inserir o asterisco no campo “Mês”.

Hífen
O sinal de hífen é usado para especificar um intervalo. Por exemplo, se o comando deve ser executado somente em dias úteis (segunda a sexta), o campo “Dia” deve ser preenchido da seguinte maneira: 1-5.

Vírgula
As vírgulas têm a função de listar uma sequência de valores. É uma opção ideal para agendar momentos esporádicos, como uma tarefa a ser executada nos dias 4, 15 e 19 do mês. No caso, o preenchimento do campo “Dia” ficaria: 4, 15, 19.

Barra
A barra frontal (forward slash, do inglês), por sua vez, especifica a etapa dos valores. Supondo que seja inserido o valor 0-55/5 (ou */5), a tarefa será executada a cada cinco minutos.

Hash
Assim como no ambiente deprogramação, o símbolo hash (#) é usado para adicionar comentários em uma instrução. Deste modo o conteúdo não será processado pela ferramenta.

Você pode procurar mais exemplos de uma definição de programação de trabalho cron aqui.

Validador de cron



Etapas para configurar um cron job no Django


install via pip:
pip install django-crontab


add it to installed apps in django settings.py:
INSTALLED_APPS = (
'django_crontab',
...
)


now create a new method that should be executed by cron every 5 minutes, f.e. in myapp/cron.py:
def my_scheduled_job():
pass


now add this to your settings.py:
CRONJOBS = [
('*/5 * * * *', 'myapp.cron.my_scheduled_job')
]


you can also define positional and keyword arguments which let you call django management commands:
CRONJOBS = [
('*/5 * * * *', 'myapp.cron.other_scheduled_job', ['arg1', 'arg2'], {'verbose': 0}),
('0 4 * * *', 'django.core.management.call_command', ['clearsessions']),
]


finally run this command to add all defined jobs from CRONJOBS to crontab (of the user which you are running this command with):
python manage.py crontab add


show current active jobs of this project:
python manage.py crontab show


removing all defined jobs is straight forward:
python manage.py crontab remove

#Após a configuração só reiniciar o servidor que funcionará normalmente
sudo systemctl restart gunicorn
 




Problemas possíveis


no crontab for root/user x # esse erro pode ser exibido na primeira tentativa de configuração do cron

Solução:

Provavelmente porque esse usuário ainda não tem um crontab. Você pode criar um crontab para este usuário chamando:
crontab -e # resolve o problema criando o arquivo cron para o usuário ativo






Referências


Comentários

Postagens mais visitadas deste blog

Weasyprint

Models - Django

Django Mask with JQuery Mask Plugin