Eu queria saber se meus trabalhos do crontab foram escritos corretamente. Espero executá-los em um VPS e monitorá-los não é realmente possível. Sem mais delongas, aqui estão meus cron jobs:
# cd into directory at 2:57 AM
57 2 * * 1-5 cd /folder_name
# activate the virtual environment
58 2 * * 1-5 . env/bin/activate
# run the main script
59 2 * * 1-5 python main.py
# at 5pm break the script (worried the most about this part)
0 16 * * 1-5 ^C
Além disso, mudei o relógio do sistema para o horário do leste. Isso significa que os cron jobs serão executados usando o fuso horário do leste?
Responder1
Não, cron
não é uma concha. Escreva um roteiro:
#!/bin/sh
cd /folder_name
. env/bin/activate
exec python main.py
Torne-o executável e aponte uma crontab
entrada para ele:
57 2 * * 1-5 /path/to/script
O script deve ser executado todas as segundas a sextas-feiras, às 14h57 no fuso horário local (ideia da sua máquina). Se você configurou seu sistema de e-mail corretamente, os resultados (se houver) serão enviados para você.
Responder2
Seus cron jobs não foram gravados corretamente. Cada cron job obtém seu próprio ambiente, o que significa que o cd
comando não tem influência nos cronjobs seguintes.
No que diz respeito aos ambientes virtuais, sugiro que você ative manualmente o ambiente virtual e depois execute which python
você mesmo. Isso lhe dará um caminho completo para um python
programa que sempre será executado nesse ambiente virtual. Você deve usar este caminho python em seu cron.
O crontab final deve ser parecido com isto:
0 3 * * 1-5 /full/path/to/virtualenv/python /full/path/to/main.py
No que diz respeito a encerrar o processo posteriormente, a solução mais comum para esse problema é usar um pidfile. Existem bibliotecas python para ajudá-lo a fazer isso. Esta respostaé bastante completo sobre esse assunto, mas não está realmente relacionado à questão do crontab.