2011-02-07 19 views
7

Stack:Rake Task di Crontab?

Apache2

Rails 2.3.8

RedHat Linux

Rubino Enterprise 1.8.7

ottenuto il seguente compito rastrello in crontab di mio utente applicazione che si propone di estrarre i record in una tabella del database ogni 15 minuti:

*/15 * * * * app_user cd /var/www/apps/my_app/current/ && rake thing:do_stuff RAILS_ENV=production 

Vedo che il demone cron sta eseguendo questa attività nel registro cron, ma la tabella del database in cui deve inserire i record non cambia. Questa attività funziona senza errori quando la eseguo manualmente nella directory/var/www/apps/my_app/current e trascino i record nella tabella come mi aspetto.

I ha ripristinato la variabile PATH nel crontab per riflettere con REE, pensando che forse il percorso predefinito no jive con/opt/ruby-enterprise ...

Come faccio ad avere questo compito rastrello per eseguire effettivamente con cron?

+1

Lo stai eseguendo anche come utente? sudo su app_user, quindi esegui ESATTAMENTE il comando come è in cron job. Dovrebbe funzionare in cron se funziona così. –

risposta

8

Provare a utilizzare il percorso completo per eseguire il binario (eseguire nella console which rake e sostituire il rake con il percorso completo).

Per esempio, se which rake restituisce il percorso seguente:

/Users/bob/.rvm/gems/ruby-1.9.3-p194/bin/rake 

è necessario utilizzare il seguente comando per eseguire l'attività di rake:

/Users/bob/.rvm/bin/rvm all do bundle exec rake allocator:snapshot 

e preferisco ogni volta gioiello per cron jobs in rubino

Come rilevare se l'attività non è riuscita in cron? Su fail cron tenta di inviare email. Quindi puoi configurare postfix per usare le tue impostazioni smtp (da google ad esempio) e aggiungere il file ~/.forward contenente solo la tua email alla directory home dell'utente che sta eseguendo quel cronjob nel tuo sistema.

10
0,15,30,45 * * * * /bin/bash -l -c 'cd /var/www/apps/my_app/current && RAILS_ENV=production bundle exec rake thing:do_stuff --silent'