कैसे crontab पथ चर सेट करने के लिए


17

मुझे एक स्क्रिप्ट को क्रॉस्टैब से चलाने में समस्या थी। कुछ शोध के बाद मुझे समझ आया कि समस्या इसलिए थी क्योंकि पैथ पैरामीटर में / sbin शामिल नहीं है।

मैंने देखा कि इसमें क्या शामिल है / etc / crontab:

PATH=/sbin:/bin:/usr/sbin:/usr/bin

परीक्षण के रूप में - पाथ चर को प्रिंट करने के लिए सरल क्रोन जॉब:

* * * * * echo $PATH &> /root/TMP.log

आउटपुट है:

cat /root/TMP.log
/usr/bin:/bin

मुझे यह व्यवहार समझ में नहीं आ रहा है ... मैं पाथ चर कैसे सेट करूँ ..? या बेहतर - इसमें पथ कैसे जोड़ें?

जवाबों:


17

जब वे समान होते हैं, तो एक उपयोगकर्ता क्रॉस्टैब (क्रॉस्टेब का उपयोग करके संपादित) अलग होता है और सिस्टम क्रॉस्टैब (संपादन / आदि / कॉट्रैब द्वारा संपादित) से एक अलग रास्ता रखता है।

सिस्टम crontab में 7 फ़ील्ड हैं, कमांड से पहले एक यूज़रनेम सम्मिलित करते हैं। दूसरी ओर, उपयोगकर्ता क्राउटैब में केवल 6 फ़ील्ड हैं, जो समय फ़ील्ड्स के तुरंत बाद सीधे कमांड में जा रहे हैं।

इसी तरह, सिस्टम crontab में PATH में सामान्य रूप से / sbin निर्देशिका शामिल होती है, जबकि उपयोगकर्ता crontab में PATH नहीं करता है। यदि आप उपयोगकर्ता Crontab के लिए PATH सेट करना चाहते हैं, तो आपको उपयोगकर्ता Crontab में PATH चर को परिभाषित करने की आवश्यकता है।


क्रोन में शेल कमांड में अपने नियमित पेट को जोड़ने के लिए एक सरल उपाय यह है कि एक लॉग शेल में बैश चलाकर क्रोनजोब स्रोत को अपनी प्रोफ़ाइल में रखें। के बजाय उदाहरण के लिए

* * * * * some command

आप इसके बजाय भाग सकते हैं

* * * * * bash -lc some command

इस तरह यदि आपकी प्रोफ़ाइल कुछ विशेष के लिए पैठ या अन्य पर्यावरण चर निर्धारित करती है, तो यह भी आपकी आज्ञा में शामिल हो जाती है।


धन्यवाद, यह समझाता है ... लेकिन इस तरह मैं केवल पथ सेट कर सकता हूं, और संपादित नहीं कर सकता, क्योंकि पथ = / sbin: $ PATH या समान काम नहीं करता है। मैंने कोशिश की ...
सीएसआई

हां, आपको पैठ को इस तरह से एक मामले में खरोंच से परिभाषित करने की आवश्यकता होगी, जो कि काफी आसान होना चाहिए, क्योंकि आप सभी को जानते हैं कि आपके क्रॉस्टेब में चलने वाले सभी कमांड हैं, इसलिए आपको बस उन पर ध्यान देने की आवश्यकता है।
सेम

@madumlao bash -lcमदद नहीं करता है। मैं अब मैन्युअल रूप से PATH की स्थापना के साथ अच्छा हूं, लेकिन अगर मैं कुछ स्क्रिप्ट स्थापित करता हूं, तो मैं चाहता हूं कि उन्हें पूर्ण पथ निर्दिष्ट किए बिना क्रोनोजर में पहचाना जाए। मुझे यकीन है कि यह किसी भी तरह संभव है, और bash -lcएक समाधान के रास्ते पर है :)
csny

4
bash -lc एक लॉगिन शेल शुरू करता है जो आपके उपयोगकर्ता की प्रोफाइल को बनाता है। इसका मतलब है कि यह ~ / .bash_profile, ~ / .profile, या ~ / .bashrc में सेट किए गए PATH का उपयोग करता है ... क्या आपके पास वहां सेट किया गया पथ है? यदि ऐसा है और यह बीमार काम करता है तो इसके लिए मेरे जवाब को अपडेट करें
madumlao

महान। धन्यवाद मदुनलो। जब मैंने मैन्युअल रूप से बिन फ़ाइल फ़ोल्डर को ~ / .bash_profile में जोड़ा, उसके बाद मेरा क्रोनजॉब अच्छी तरह से काम करता है।

8

यदि आपको डिफ़ॉल्ट सिस्टम विस्तृत PATH और अन्य ENV चर (जो /etc/profile.d में परिभाषित किया गया है) की आवश्यकता है, तो बस निम्नलिखित डालें:

* * * * * . /etc/profile; your cmd

3

PATH (या अन्य मापदंडों) को क्रोनजॉब लाइन में या एक लाइन पर सेट करना संभव है। लेकिन आप शेल विस्तार का उपयोग करने में सक्षम नहीं हैं PATH=$PATH:/usr/local/bin। लेकिन घर निर्देशिका शॉर्टकट के लिए टिल्ड की अनुमति है।

पुस्तकों से:

क्रॉस्टैब में एक सक्रिय लाइन या तो एक पर्यावरण सेटिंग या क्रोन कमांड है। एक पर्यावरण सेटिंग फॉर्म का है: नाम = मान जहां समान-चिह्न (=) के आसपास सफेद रिक्त स्थान वैकल्पिक हैं, और मूल्य में किसी भी बाद के गैर-अग्रणी सफेद स्थान नाम के लिए निर्दिष्ट मूल्य का एक हिस्सा है। मूल्य स्ट्रिंग को प्रमुख या अनुगामी श्वेत स्थानों को संरक्षित करने के लिए उद्धरण (एकल या दोहरे, लेकिन मिलान) में रखा जा सकता है।

man 5 crontabअधिक जानकारी के लिए देखें ।

तो यह काम करना चाहिए:

PATH=/bin:/usr/bin:/my/path/bin
5 3 * * * command_that_requires_my_path

0

मुझे भी यही समस्या थी और मुझे अपनी स्क्रिप्ट को क्रॉस्टैब में चलाने का अन्य तरीका मिला। मुझे लगता है कि आपके कार्यक्रम को चलाने का सबसे आसान तरीका एक स्क्रिप्ट बनाना है जो आपके कार्यक्रम की निर्देशिका में सीडी कर सके । फिर उस स्क्रिप्ट में अपने प्रोग्राम को कॉल करें।

यह एक स्क्रिप्ट (स्क्रिप्ट नाम = launcher.sh) का एक उदाहरण है:

#!bin/bash
cd /home/pi/test
sudo python3 example.py

फिर, अपनी स्क्रिप्ट को निष्पादन योग्य बनाएं:

chmod 755 launcher.sh

और अंत में, अपनी स्क्रिप्ट को क्रॉस्टैब में जोड़ें

crontab -e

और इस पंक्ति को अंत में जोड़ें:

@reboot sh /home/pi/test/launcher.sh

(मैं प्रत्येक रिबूट पर चलाने के लिए कार्यक्रम सेट करता हूं)

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