Crontab सिंटैक्स; एकाधिक आदेश


14

मैं एक क्रोनजोब के रूप में कमांड की निम्नलिखित श्रृंखला प्राप्त करना चाहता हूं:

* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py

यह कंसोल में काम करता है, लेकिन मुझे क्रोनजोब से कोई आउटपुट नहीं मिलता है।

मैंने इस सुझाव का पालन ​​किया , इसके स्थान पर

* * * * * env > /tmp/env.output

पता लगाने के लिए कि क्या env अलग है। मुझे पाथ के अलग होने के अलावा कुछ भी प्रासंगिक नहीं मिला। तो फिर मैंने सेट किया

PATH=myPath
* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py

और यह अभी भी काम नहीं किया। अंत में मैंने इसे बदल दिया

PATH=myPath
* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py
* * * * * env > /tmp/env.output

और इस बार मुझे env.outputफ़ाइल भी नहीं मिली । इसलिए मुझे लगता है कि मेरे सिंटैक्स में कुछ गड़बड़ है - लेकिन यह बिल्कुल वैसा ही लगता है, जैसा मैंने ऑनलाइन पाया गया मल्टी-कमांड सुझाव।

यहाँ क्या चल रहा है? यदि यह स्पष्ट नहीं है, तो त्रुटि का पता लगाने के लिए मैं आगे क्या कर सकता हूं?

PATH=/usr/local/anaconda2/envs/myenv3/bin:~/.conda:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

out.err:

/bin/sh: 6: /usr/local/anaconda2/envs/myenv3/bin/activate: [[: not found
/bin/sh: 15: /usr/local/anaconda2/envs/myenv3/bin/activate: [[: not found
/bin/sh: 17: /usr/local/anaconda2/envs/myenv3/bin/activate: [[: not found
Only bash and zsh are supported

जवाबों:


16

उबंटू में, डिफ़ॉल्ट रूप से, cronडेमन सभी नौकरियों sh( dash) शेल का उपयोग करके चलाता है और dashइसमें sourceबिलिन नहीं होता है ।

आपको POSIX तरीके का उपयोग करने की आवश्यकता है .:

* * * * * . activate myenv3 && cd ~/foo/bar && python sssb.py

वैकल्पिक रूप से, आप नौकरी को तर्क के रूप में चला सकते हैं bash:

* * * * * "$(command -v bash)" -c 'source activate myenv3 && cd ~/foo/bar && python sssb.py'

अब मेरे पास /tmp/env.output फ़ाइल फिर से है, लेकिन अभी भी मुख्य फ़ाइल से कोई आउटपुट नहीं है।
फुआबर

1
@FooBar का आउटपुट क्या है grep SHELL /tmp/env.output? पहली नौकरी को भी चलाएं * * * * * ( . activate myenv3 && cd ~/foo/bar && python sssb.py ) >/tmp/out.err 2>&1और सामग्री की जाँच करें/tmp/out.err
heemayl

इसे शेल = / बिन / श कहते हैं। मैं out.errप्रश्न में चिपकाए गए वास्तविक पैठ का उत्पादन और पेस्ट करूँगा ।
फुआबर

1
आपके उपयोग के लिए +1 आपके एन्कैप्सुलेशन के लिए $(command -v bash) -c ' ... '- पूरे टाइगू w / o को हल करता है (ऐसा नहीं) गन्दा विवरण।
Cbhihe

1
कमांड -v भाग "$(command -v bash)" -c '...'व्यर्थ है। बस करेंbash -c '...'
जियरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.