Estoy intentando ejecutar un comando de administración de Django desde cron. Estoy usando virtualenv para mantener mi proyecto aislado.Cron y virtualenv
he visto ejemplos aquí y en otros lugares que muestran la ejecución de comandos de gestión de dentro de virtualenv como:
0 3 * * * source /home/user/project/env/bin/activate && /home/user/project/manage.py command arg
Sin embargo, a pesar de que syslog muestra una entrada cuando la tarea debería haber comenzado, esta tarea se ejecuta en realidad nunca (la el archivo de registro para el script está vacío). Si ejecuto la línea manualmente desde el shell, funciona como se esperaba.
La única forma en que actualmente puedo conseguir el comando para ejecutar a través de cron, es romper los comandos y los puso en una muda escritura del golpe envoltorio:
#!/bin/sh
source /home/user/project/env/bin/activate
cd /home/user/project/
./manage.py command arg
EDIT:
ars subió con una combinación de trabajo de comandos:
0 3 * * * cd /home/user/project && /home/user/project/env/bin/python /home/user/project/manage.py command arg
por lo menos en mi caso, la invocación de la secuencia de comandos de activación para el virtualenv no hicieron nada. Esto funciona, etc. con el espectáculo.
Una diferencia que veo es que el script se ejecutará con manage.py/home/usuario/proyecto como el directorio de trabajo actual. Su comando cron se ejecutará con su directorio de inicio como cwd. Tal vez el archivo de registro está allí? – rettops
En realidad, la ruta del registro se define de manera absoluta, simplemente no se crea/no se agrega porque el script no se está ejecutando. –
Una solución rápida y sucia a los problemas de cron consiste en volcar su entorno (en el cual su comando inexplicablemente está funcionando) con 'env' y' export' en un contenedor de script bash que usted llama desde el crontab. – jberryman