Estoy tratando de ejecutar un comando de administración de Django desde cron. Estoy usando virtualenv para mantener mi proyecto protegido.
He visto ejemplos aquí y en otros lugares que muestran comandos de administración en ejecución desde dentro de virtualenv como:
0 3 * * * source /home/user/project/env/bin/activate && /home/user/project/manage.py command arg
Sin embargo, aunque syslog muestra una entrada cuando la tarea debería haber comenzado, esta tarea nunca se ejecuta realmente (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 obtener el comando para que se ejecute a través de cron, es dividir los comandos y ponerlos en un script de envoltura de bash tonto:
#!/bin/sh
source /home/user/project/env/bin/activate
cd /home/user/project/
./manage.py command arg
EDITAR:
Ars se le ocurrió una combinación funcional de comandos:
0 3 * * * cd /home/user/project && /home/user/project/env/bin/python /home/user/project/manage.py command arg
Al menos en mi caso, invocar el script de activación para virtualenv no hizo nada. Esto funciona, así sucesivamente con el espectáculo.
env
y export
todos ellos en un contenedor de script bash al que llama desde el crontab.