2009-08-30 4 views
0

J'ai un travail cron pour exécuter un script Ruby, qui s'exécute bien sur la ligne de commande (de l'utilisateur "user"), mais le cron échoue parce qu'il ne peut pas trouver un rubail gem TMail. J'ai manuellement installé la gemme de tmail à mon ~ /. Gems/dir, pointé par mon ~/.bashrc script, comme suggested par Nate.Appeler Rubygem tmail de Dreamhost CRONjob

Lorsqu'il est invoqué manuellement à partir du shell (sur le serveur Deadpool)

./home/user/site.com/appdir/testbalances.sh

fonctionne très bien, mais à partir du Web crontab -interface (même commande), je reçois un courrier de journal:

/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in gem_original_require': no such file to load -- tmail (LoadError) from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in require » de afschriftmonito r/statement_monitor.rb: 7

lignes 6 et 7 du fichier afschriftmonitor/statement_monitor.rb: 7 sont

require 'rubygems' require 'tmail'

Il semble que CRON est en cours d'exécution à partir d'un autre serveur, ou il ignore le fichier ~/.bashrc? Comment puis-je réparer cela? Il semble que Dreamhost héberge un problème spécifique, car le script s'exécute correctement sur mon Mac et - comme je l'ai dit - très bien sur mon compte shell sur Dreamhost. Je suis perplexe.

Répondre

1

Ces types de problèmes sont invariablement une discordance entre votre environnement shell et l'environnement cron. Voir cette page pour diverses suggestions: Does your cron script run in a bash shell, but not while running under crontab?

+0

Belle suggestion, je l'ai essayé et ajouté .bashrc dans le bashscript qui appelle l'appel de rubis. N'a pas aidé :-( –

+0

En fait, il y avait confusion sur le serveur, il a fonctionné chez Dreamhost, ce qui conduit à des signaux mixtes, mais cette réponse a résolu le problème original.Merci pour vos commentaires sur ma réponse! –

1

fixe moi-même: tourné il est/était un problème en 2 parties:

  • Dreamhost fonctionne il est CRON (comme tout autre CRON AFAIK) de la coquille de poisson, alors que mes tests de console provenaient de Bash shell. Comme le soulignait Glenn, CRON charge des paramètres d'environnement différents de ceux de votre console.

La combinaison de ces j'ai réussi à résoudre le problème par:

  1. Duplication mon ~/.bashrc dans un fichier ~/.shrc, (ensemble chmod + x)
  2. Ajouter ce qui suit ligne vers le haut de mon script bash, allumé à partir de CRON:

    . ~/.shrc

Vérification de l'environnement est simple droit en ajoutant un appel à env dans le script.

+0

Si vous ' re sourcing un fichier, il n'est pas nécessaire qu'il soit exécutable, juste lisible. –

+0

Il peut être instructif d'exécuter "env; set" comme tâche cron pour voir quel est l'environnement du serveur. –

Questions connexes