Probleem met Cron en Rails3

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Dipsausje
  • Registratie: Februari 2006
  • Niet online
Ik gebruik Whenever 0.7.3, Rails 3.2.2, Ruby 1.9.3, Passenger 3.0.11 op een CentOS 5.6 server (gebruik geen rvm). Probleem is dat de cron jobs gemaakt door whenever volgens de logs worden uitgevoerd, maar ik zie de resultaten niet terug in de database. Als ik de gegenereerde code kopieer en via ssh op de server loslaat gebeurt alles wel zoals verwacht, dus hoe kan het dat het als ingeplande cron-job niet werkt?


De code die de cron job moet aanspreken:

code:
1
2
3
4
5
6
7
class SomeModel < ActiveRecord::Base

  #Delete all items that haven't been updated for 2 hours or more
  def self.cron_job
    SomeModel.destroy_all(updated_at < ?", 2.hours.ago])
  end
end


schedule.rb (whenever):
code:
1
2
3
4
5
set :output, "/var/log/cron"

every 1.day, :at => '4:45 am' do
  runner "SomeModel.cron_job"
end


De gegenereerde cron-job (output crontab -l):

code:
1
2
3
# Begin Whenever generated tasks for: site_name
45 4 * * * /bin/bash -l -c 'cd /home/user/domains/site_name && script/rails runner -e production '\''SomeModel.cron_job'\'' >> /var/log/cron 2>&1'
# End Whenever generated tasks for: site_name


De volgende ochtend vind ik het volgende in de cron-log:
code:
1
Apr 14 04:45:01 node1 crond[9155]: (root) CMD (/bin/bash -l -c 'cd /home/user/domains/site_name && script/rails runner -e production '\''SomeModel.cron_job'\'' >> /var/log/cron 2>&1')


Echter er is dan dus niets gebeurt in de database, de code lijkt niet uitgevoerd. Als ik de cronjob kopieer (/bin/bash -l -c 'cd ... 2>&1') en via ssh op de server los laat werkt alles wel

Overigens zie ik in het cron-log soms deze melding staan, echter niet bij elke uitgevoerde cron en als er meerdere achter elkaar worden uitgevoerd verschijnt het slechts 1x:
code:
1
2
3
4
from script/rails:5:in `require'
from script/rails:5
from script/rails:5:in `require'
from script/rails:5


Weet iemand hier hoe het kan dat het niet lijkt te werken via de Cron-job, maar wel als ik exact dezelfde functie handmatig aanspreek? Ik snap zelf niet wat hier nu precies mis gaat.

Acties:
  • 0 Henk 'm!

  • MikeN
  • Registratie: April 2001
  • Laatst online: 19:11
Over het algemeen komt dit door het PATH wat redelijk gestript is bij uitvoeren via cron. Als je iets als PATH="/usr/local/bin:/usr/bin:/bin" bovenin je crontab zet wil het vaak al een stuk beter.

Acties:
  • 0 Henk 'm!

  • Dipsausje
  • Registratie: Februari 2006
  • Niet online
Bedankt, heb ik geprobeerd, eens kijken of het nu wel werkt. Ik had zelf het idee dat een commando in crontab hetzelfde moest functioneren als daar buiten, blijkbaar geen valide aanname in dit geval.

Ik kwam er ook achter dat Ruby zowel in /usr/bin als in /usr/local/bin bleek te bestaan, terwijl bijvoorbeeld Rails netjes alleen in /usr/local/bin stond. Heb de extra ruby in /usr/bin ook maar verwijderd, bleek ook nog eens dezelfde versie te zijn, waarschijnlijk ooit eens misgegaan met updaten. :X