2013-03-05 213 views
5

我的腳本使用mysql,tiny_tds,fileutils和net/ftp。運行在紅寶石1.9.3上。當我從文件夾內運行它時它工作得很好。從cron執行ruby腳本

但是,當我將它添加到cron選項卡時,tiny_tds不斷失敗。我不知道是否有任何其他寶石的失敗,因爲我不能獲得通過這樣的錯誤:

require': no such file to load -- tiny_tds (LoadError)

我試圖從crontab中會使用相同的外殼執行它,我得到這個錯誤。

整個腳本只是1個文件。

我是ruby的新手,所以我的知識僅限於正確設置環境。

在文件的頭我有

#!/usr/bin/ruby 
    require "mysql" 
    require "fileutils"; 
    require "tiny_tds" 
    require "net/ftp" 

總之,我從MySQL獲得作業的列表,比較,對MSSQL,FTP文件過來,更新的MySQL時再工作就完成了。

而我需要從cron運行這個。

經過研究了一下,我試圖設置寶石爲全球,但是,我認爲這可能沒有奏效。

在此先感謝您的幫助!

+0

你找到噸分辨率他? – 2018-03-08 20:15:26

回答

5

這是因爲您在命令行上擁有的環境變量在crond執行代碼時未設置。通常的嫌疑人是PATH,LD_LIBRARY_PATH,以及登錄時設置的別名。

你可以看到的crond做什麼:使用crontab -e

* * * * * set > /tmp/setvals 

創建上面的條目。讓它運行一段時間。回到crontab -e並刪除該新條目。

/tmp/setvals中的內容與在命令行中發出set命令時shell的內容進行比較。然後,您可以採取措施爲您的cron作業環境修改內容。

2

有RVM的多種方式與cron的合作,如果你使用腳本那麼最簡單的只是使用RVM - 這意味着不使用系統紅寶石#!/usr/bin/ruby - 只是把在第一線#!/path/to/rvm/wrappers/ruby-1.9.3-p392/ruby

可以使用別名來阻止腳本硬編碼一個紅寶石路徑:

rvm alias create my_app 1.9.3 

,然後在腳本標頭(第一行):

#!/path/to/rvm/wrappers/my_app/ruby