2012-11-19 17 views
12

मेरे पास एक रूबी स्क्रिप्ट है जो अमेज़ॅन एस 3 बाल्टी से जुड़ती है और नवीनतम उत्पादन बैकअप डाउनलोड करती है। मैंने स्क्रिप्ट का परीक्षण किया है (जो बहुत आसान है) और यह ठीक काम करता है।क्रोन जॉब मणि लोड नहीं कर सकता

हालांकि, जब मैं इस स्क्रिप्ट को क्रॉन नौकरी के रूप में चलाने के लिए शेड्यूल करता हूं तो यह असफल लगता है जब यह अमेज़ॅन (aws-s3) मणि लोड करता है।

मेरी स्क्रिप्ट की पहली कुछ पंक्तियों इस तरह दिखता है:

#!/usr/bin/env ruby 
require 'aws/s3' 

जैसा कि मैंने कहा, जब मैं इस स्क्रिप्ट मैन्युअल रूप से चलाना है, यह ठीक काम करता है। जब मैंने इसे एक अनुसूचित क्रॉन जॉब के माध्यम से चलाने के लिए, यह विफल रहता है, जब यह मणि लोड करने के लिए कोशिश करता है:

`की आवश्यकता होती है ': लोड करने के लिए ऐसी कोई फाइल नहीं - एडब्ल्यूएस/S3 (LoadError)

इस स्क्रिप्ट के लिए crontab इस तरह दिखता है:

0 3 * * * ~/Downloader/download.rb > ~/Downloader/output.log 2>&1 

मैं मूल रूप से, क्योंकि क्रॉन एक अन्य उपयोगकर्ता के रूप में चल रहा है यह हो सकता है सोचा था, लेकिन जब मैं अपने गहरे लाल रंग का स्क्रिप्ट के शुरू में एक 'Whoami' क्या यह मुझे यह चल रहा है बताता है उसी उपयोगकर्ता के रूप में मैं हमेशा उपयोग करता हूं।

मैंने एक बंडल इनिट भी किया है और मेरे रत्न में मणि जोड़ा है, लेकिन ऐसा कोई प्रभाव नहीं प्रतीत होता है।

क्रॉन मणि को लोड करने में विफल क्यों होता है? मैं उबंटू चला रहा हूँ।

उत्तर

11

यदि आप इसे मैन्युअल रूप से चला रहे हैं और यह काम करता है तो संभवतः आप क्रॉन निष्पादित होने की तुलना में एक अलग खोल वातावरण में हैं। चूंकि आप उल्लेख करते हैं कि आप उबंटू पर हैं, क्रॉन नौकरियां शायद/bin/sh के अंतर्गत निष्पादित होती हैं, और आप यदि आपने कुछ भी नहीं बदला है तो मैन्युअल रूप से उन्हें/bin/bash के अंतर्गत चलाएं।

आप अपनी पर्यावरण समस्याओं को डीबग कर सकते हैं या आप अपना काम चलाने वाले खोल को बदल सकते हैं।

डीबग करने के लिए, यह पता लगाने के कई तरीके हैं कि आपकी क्रॉन नौकरियां किस शैल का उपयोग कर रही हैं। यह

/etc/crontab 

में परिभाषित किया जा सकता है या आप अपने खोल और पर्यावरण जानकारी डंप करने के लिए एक क्रॉन जॉब कर सकते हैं के रूप में इस में उल्लेख किया गया है तो जवाब: How to simulate the environment cron executes a script with?

कि खोल करने के लिए स्विच और वास्तविक को देखने के लिए विफल अपनी नौकरी के कारण त्रुटियों,

sudo su 
env -i <path to shell> (e.g. /bin/sh) 

तब तक स्क्रिप्ट चलाने आप क्या त्रुटियाँ हैं देख सकते हैं और उन्हें ठीक करने के लिए सक्षम होना चाहिए कर (rubygems?)।

विकल्प 2 गोले स्विच करना है। आप हमेशा कुछ ऐसा करने की कोशिश कर सकते हैं:

0 3 * * * /bin/bash -c '~/Downloader/download.rb > ~/Downloader/output.log 2>&1' 

अपनी नौकरी को बाश में मजबूर करने के लिए। यह चीजों को भी साफ़ कर सकता है।

+2

बाहर निकलता है मुझे उस खोल में rubygems स्थापित करने की आवश्यकता है। इससे मुझे इसे ट्रैक करने में मदद मिली। –

0
एक गैर क्रॉन पर्यावरण echo $PATH निष्पादित, पथ कॉपी करें और अपने crontab में पेस्ट, अपने आदेश से पहले में

:

echo $PATH 
/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin 

और crontab के अंदर:

PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin 
0 3 * * * ~/Downloader/download.rb > ~/Downloader/output.log 2>&1 
4

तुम भी स्पष्ट रूप से सेट कर सकते हैं अपने जेम पथ:

GEM_HOME="/usr/local/rvm/gems/[email protected]"

+0

आप अपने मणि घर को गैर-क्रॉन पर्यावरण में देख सकते हैं: '$ GEM_HOME' – thiagotonon

22

यहाँ https://coderwall.com/p/vhv8aw उल्लेख किया है तो आप बस

rvm cron setup # let RMV do your cron settings

है कि आप अपने crontab की प्रतिलिपि बनाने सुनिश्चित करें कि इस आदेश को चलाने से पहले की कोशिश कर सकते

+1

आप मेरी ज़िंदगी बचाओ, बहुत धन्यवाद। – overallduka

+5

नोइस। बस अपने क्रॉन्टाब को बैकअप करना सुनिश्चित करें क्योंकि यह मेरा हटा दिया गया है। – Peleg

+1

इसके लिए धन्यवाद, बस 2 घंटे रोते हुए बिताए। –

1

अपने क्रॉन की शुरुआत में इस जोड़े

PATH="/home/user/.rvm/gems/ruby-2.1.4/bin:/home/user/.rvm/gems/[email protected]/bin:/home/user/.rvm/rubies/ruby-2.1.4/bin:/home/user/.rvm/gems/ruby-2.1.4/bin:/home/user/.rvm/gems/[email protected]/bin:/home/user/.rvm/rubies/ruby-2.1.4/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/home/user/.rvm/bin:/usr/local/sbin:/usr/sbin:/home/user/.rvm/bin:/home/user/.local/bin:/home/user/bin" 
GEM_HOME='/home/user/.rvm/gems/ruby-2.1.4' 
GEM_PATH='/home/user/.rvm/gems/ruby-2.1.4:/home/user/.rvm/gems/[email protected]' 
MY_RUBY_HOME='/home/user/.rvm/rubies/ruby-2.1.4' 
IRBRC='/home/user/.rvm/rubies/ruby-2.1.4/.irbrc' 
RUBY_VERSION='ruby-2.1.4' 
संबंधित मुद्दे