2009-08-30 22 views
0

我有一個cron作業來運行Ruby腳本,該腳本可以在命令行(來自用戶「用戶」)上正常運行,但cron失敗是因爲它找不到ruby寶石TMail。我手工將我的〜/ .gems/dir安裝到我的〜/ .bashrc腳本指向的tmail gem中,作爲Nate的suggested從Dreamhost調用Rubygem tmail CRONjob

當從shell手動調用(deadpool服務器上)

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

工作正常,但是從網絡的crontab從afschriftmonito

/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需要」 : - 接口(相同的命令),我得到一個日誌郵件R/statement_monitor.rb:7

線6和文件afschriftmonitor/statement_monitor.rb的7:7是

需要 '的rubygems' 需要 'tmail'

它似乎CRON從另一臺服務器上運行,或者它忽略了〜/ .bashrc文件?我怎樣才能解決這個問題?這似乎是Dreamhost託管的特定問題,因爲腳本在我的Mac上本地運行良好,並且 - 正如所述 - 從Dreamhost的shell帳戶中可以正常運行。我感到困惑。

回答

1

這些類型的問題總是在您的shell環境和cron環境之間不匹配。對於各種建議看到這個頁面:Does your cron script run in a bash shell, but not while running under crontab?

+0

不錯的建議,我試了一下,並將.bashrc添加到調用ruby調用的bash腳本中。沒有幫助:-( – 2009-08-30 16:15:01

+0

其實它沒有,在Dreamhost上運行的服務器很混亂,導致了混合信號,但是這個答案解決了原來的問題,謝謝你對我的回答的評論! – 2009-09-08 12:36:09

1

固定它自己:原來,這是/是一個兩部分的問題:

  • Dreamhost的運行它從SH外殼的cron(任何其他CRON據我所知),而我的控制檯測試來自Bash shell。
  • 正如Glenn指出的那樣,CRON會加載與控制檯外殼不同的環境設置。

結合這些我設法解決該問題:

  1. 複製我的〜/ .bashrc到〜/ .shrc文件,(設置於chmod + x)的
  2. 添加以下行到我的bash腳本的頂部,從CRON點燃:

    。 〜/ .shrc

檢查正確的環境是通過將呼叫env在腳本中簡單。

+0

如果你在'重新採購一個文件,這不是必須的,它是可執行的,只是可讀的。 – 2009-08-30 18:18:31

+0

將「env; set」作爲cron作業運行以查看服務器的環境是有益的。 – 2009-08-30 18:19:06