Sto provando a eseguire un comando di gestione Django da cron. Sto usando virtualenv per mantenere il mio progetto in modalità sandbox.Cron e virtualenv
Ho visto esempi qui e altrove che mostrano l'esecuzione di comandi di gestione dall'interno virtualenv di simile:
0 3 * * * source /home/user/project/env/bin/activate && /home/user/project/manage.py command arg
Tuttavia, anche se syslog mostra una voce quando il compito avrebbe dovuto cominciare, questo compito viene eseguito in realtà mai (la il file di registro per lo script è vuoto). Se eseguo la linea manualmente dalla shell, funziona come previsto.
L'unico modo che posso attualmente ottenere il comando da eseguire tramite cron, è quello di rompere i comandi su e metterli in un muto script bash avvolgitore:
#!/bin/sh
source /home/user/project/env/bin/activate
cd /home/user/project/
./manage.py command arg
EDIT:
ars si avvicinò con una combinazione di lavoro di comandi:
0 3 * * * cd /home/user/project && /home/user/project/env/bin/python /home/user/project/manage.py command arg
almeno nel mio caso, invocando lo script di attivazione per il virtualenv non ha fatto nulla. Funziona così, così via con lo spettacolo.
Una differenza che vedo è che lo script verrà eseguito manage.py con/home/utente/progetto come directory di lavoro corrente. Il tuo comando cron verrebbe eseguito con la tua home directory come cwd. Forse il file di registro è lì? – rettops
In realtà il percorso del log è definito in modo assoluto, semplicemente non viene creato/aggiunto perché lo script non è in esecuzione. –
Una soluzione rapida e sporca ai problemi di cron è scaricare l'ambiente (in cui il comando funziona inspiegabilmente) con 'env' e 'esportarli' tutti in un wrapper di script bash che chiamate da crontab. – jberryman