2014-10-21 9 views
19

से काम नहीं कर रहा है इसलिए मेरे पास एडब्लूएस दैनिक से एक फ़ाइल डाउनलोड करने और इसे एक स्प्रेड शीट में जोड़ने के लिए एक स्क्रिप्ट है। ऐसा करने के लिए मैंने एक cronjob स्थापित किया है।एडब्ल्यूएस क्रोनबॉज

जब मैं इसे मैन्युअल रूप से चलाता हूं तो स्क्रिप्ट ठीक काम करता है, लेकिन cronjob से चलते समय काम नहीं करता है।

कोड एक लाइन है:

aws s3 cp s3://My/files/backup/ ~/home/AnPoc/ --recursive --exclude "*.tgz" --include "*results.tgz" 

और ईमेल में मैं cronjob निष्पादन से मिल जाए, तो मैं निम्न त्रुटि संदेश देख:

./AnPoc/DayProcessing.sh: line 14: aws: command not found 

मैं नहीं जानता कि क्यों आदेश नहीं मिला है। कोई भी मदद बहुत अच्छी रहेगी।

+0

यह रफ़ू $ hi7 S3 CLI के लिए क्रॉन बनाने पर एक खंड में एडब्ल्यूएस द्वारा प्रलेखित किया जाना चाहिए में निष्पादित किया जाना है। – Fr0zenFyr

उत्तर

27

सबसे पहले: जांचें कि आपके सिस्टम पर निष्पादन योग्य aws संग्रहीत है। इस आदेश का उपयोग करें: अब

$ which aws 
/usr/bin/aws # example output, can differ in your system 

, स्क्रिप्ट से पहले अपने crontab में एक चर $PATH बुलाया जगह:

PATH=/usr/bin:/usr/local/bin 

उन रास्तों : द्वारा अलग जहां exectable के लिए खोज की जानी चाहिए परिभाषित करते हैं। उपर्युक्त उदाहरण में /usr/bin है। आपको अपने क्रॉन जॉब में सभी एक्जिक्यूटिव चेक करना होगा जो वे उपलब्ध हैं।

एक और बात: cronjobs में एक tilde (~) के साथ पथ से बचने का प्रयास करें। इसके बजाय /home/user का उपयोग करें।

+0

मैन्युअल रूप से निष्पादित होने पर यह क्यों काम करता है? –

+1

यदि आप $ PATH को प्रतिबिंबित करते हैं तो आप देखेंगे कि आपके सत्र में चर लोड हो गया है। हालांकि जब आप crontab से निष्पादित करते हैं तो यह नहीं होता है। –

+1

मेरी ar $ e को सहेजा गया ... मुझे अपने मेल सर्वर के बैकअप को एस 3 बाल्टी में बनाना और स्थानांतरित करना पड़ा। जब मैंने अपनी स्क्रिप्ट (aws s3 cp के साथ ...) मैन्युअल रूप से काम किया, तो इसे क्रॉन के साथ काम करने के लिए 'पथ' जोड़ने की आवश्यकता थी। मैं कसम खाता हूं कि यह आपकी पोस्ट के लिए नहीं था, मैं कभी भी इसे किसी अन्य वर्ष में खुद को समझने में सक्षम नहीं था। – Fr0zenFyr

19

आपको "aws" कमांड के लिए पूर्ण पथ का उपयोग करना चाहिए। उदाहरण के लिए,/usr/local/bin/aws

+0

यह मेरे लिए मुद्दा था, धन्यवाद। –

+1

वह क्यों है? ... –

+1

@ user5735796 - जब स्क्रिप्ट क्रॉन के माध्यम से चलाया जाता है, तो यह $ PATH चर में कॉन्फ़िगर किए गए पूर्वनिर्धारित स्थानों में निष्पादन योग्य की खोज करता है। अगर इन स्थानों में aws स्थापित नहीं है, तो आदेश नहीं मिला। तो, या तो निष्पादन योग्य के लिए पूर्ण पथ का उपयोग करें या अपने aws स्थान $ PATH चर में जोड़ें। – plspl

3

इस कोड डाल से पहले अपने आदेश पंक्ति crontab -e

SHELL=/bin/bash 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
+0

यह अच्छा विकल्प है –

संबंधित मुद्दे