क्रोन के माध्यम से स्क्रिप्ट चलाते समय "कमांड नहीं मिली"


29

मैं अपनी स्क्रिप्ट को क्रॉस्टैब में चलाना चाहता हूं, लेकिन मुझे कुछ समस्याएं हैं ...

मेरी स्क्रिप्ट में मैं यह कमांड चलाता हूं:

db2 connect to myDB2

यह ठीक काम करता है जब मैं इसे db2inst1 उपयोगकर्ता के रूप में चलाता हूं , लेकिन जब मैं db2inst1 crontab में इस स्क्रिप्ट को चलाता हूं, तो मुझे यह मिलता है:

db2: कमांड नहीं मिली।

इसे कैसे हल किया जा सकता है?

जवाबों:


43

एक कमांड में निरपेक्ष पथ टाइप करने से बचने के लिए, गोले ने $PATHपर्यावरण चर को पेश किया , प्रत्येक निर्देशिका को एक से अलग किया जाता है :और खोज को बाएं से दाएं किया जाता है। cronअक्सर इस $PATHचर सहित पूरे वातावरण को साफ करता है । इसलिए, शेल में व्यवहार की तुलना में स्क्रिप्ट आपके क्रोन में अलग तरह से व्यवहार कर सकती है।

निरपेक्ष रास्तों का उपयोग करें

प्रोग्राम के लिए पूर्ण पथ प्राप्त करने के लिए उपयोगकर्ता के which db2रूप में चलाएं । यदि आउटपुट है , तो आपका क्रोन कमांड जैसा दिखेगा:db2inst1db2/usr/bin/db2

/usr/bin/db2 connect to myDB2

पथ चर सेट करें

चर प्राप्त करने के लिए उपयोगकर्ता के echo "$PATH"रूप में चलाएं और सुनिश्चित करें कि यह चर आपकी क्रोन लिपि में भी उपलब्ध है। उदाहरण के लिए, यदि आउटपुट था , तो आप अपनी शेल स्क्रिप्ट के शीर्ष में अगली पंक्ति रखेंगे:db2inst1$PATH/usr/local/bin:/usr/bin:/bin

export PATH="/usr/local/bin:/usr/bin:/bin"

8

जैसा कि /ubuntu//a/23438/227839 में बताया गया है , आपको PATHअपनी शेल स्क्रिप्ट में सेट करना चाहिए :

#!/bin/bash
PATH="/usr/local/bin:/usr/bin:/bin"

# rest of script follows

या crontab फ़ाइल में, जो सभी क्रोन नौकरियों पर लागू होगी:

PATH="/usr/local/bin:/usr/bin:/bin"
0 1 * * * db2 connect to myDB2

धन्यवाद, यह मददगार था!
यमशिरो रियान

3

आप क्या परिभाषित करना होगा डीबी 2 और myDB2 कर रहे हैं, अन्यथा 'के निरपेक्ष स्थान का उपयोग फ़ाइल ' या ' आवेदन ' जो चलाना चाहते हैं।

उदाहरण:

/bin/rm /home/ubuntu/a.txt
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.