2013-03-21 11 views
21

यहाँ में सेट हो जाता है है मेरी क्रॉन जॉब:क्रॉन नौकरी नहीं वातावरण चर .bashrc

[email protected]:~$ crontab -l 
* * * * * /bin/bash -l -c 'source ~/.bashrc; echo $EDITOR > /tmp/cronjob.test' 

और ~/.bashrc फाइल के अंदर, मैं है export EDITOR=vim, लेकिन अंतिम /tmp/cronjob.test फ़ाइल में, यह अभी भी खाली है?

तो मैं पर्यावरण चर कैसे प्राप्त कर सकता हूं (.bashrc फ़ाइल में सेट करें) और इसे मेरे क्रॉन जॉब में उपयोग करें?

[email protected]:~$ lsb_release -a 
No LSB modules are available. 
Distributor ID: Ubuntu 
Description: Ubuntu 12.04 LTS 
Release:  12.04 
Codename:  precise 
[email protected]:~$ uname -a 
Linux dragon 3.2.0-26-generic-pae #41-Ubuntu SMP Thu Jun 14 16:45:14 UTC 2012 i686 i686 i386 GNU/Linux 

हैं उपयोग इस:

* * * * * /bin/bash -l -c -x 'source ~/.bashrc; echo $EDITOR > /tmp/cronjob.test' 2> /tmp/cron.debug.res 

/tmp/cron.debug.res में:

... 
++ return 0 
+ source /home/plee/.bashrc 
++ '[' -z '' ']' 
++ return 
+ echo 

Btw, .bashrc फ़ाइल डिफ़ॉल्ट एक अपवाद है कि मैं एक लाइन जोड़ा साथ, Ubuntu 12.04 के साथ आया है export EDITOR=vim

मैं क्रॉन जॉब उपयोग नहीं करते हैं, बजाय, बस सीधे इस कमांड लाइन पर कार्य करें:

source .bashrc; echo $EDITOR # Output: vim 
+0

क्या होता है यदि आप एक बिल्ली फ़ाइल में बिल्ली ~/.bashrc' करते हैं तो क्या होता है? – Alex

+0

'बिल्ली ~/.bashrc' से आपका क्या मतलब है? इसमें एक रेखा है: 'निर्यात संपादक = vim'। मैं पूछ रहा हूं कि 'echo' कमांड' $ EDITOR' पर्यावरण चर क्यों नहीं उठाता है। –

+0

अस्पष्ट होने के लिए खेद है, क्रॉन एंट्री में, फ़ाइल को 'स्रोत' करने के बजाय, 'बिल्ली' का उपयोग करके पुष्टि करें कि इसे 'क्रॉन' द्वारा पढ़ा जा सकता है। – Alex

उत्तर

41

source ~/.bashrc का कारण काम नहीं कर रहा है ~/.bashrc (उबंटू 12.04 से डिफ़ॉल्ट) पर सामग्री है। आप इसे में देखो, तो आप निम्नलिखित लाइनों 5 और 6 पर देखेंगे:

# If not running interactively, don't do anything 
[ -z "$PS1" ] && return 

PS1 चर एक इंटरैक्टिव खोल के लिए सेट कर दिया जाता है, इसलिए यह अनुपस्थित जब cron के माध्यम से चलाने के है, भले ही आप एक लॉगिन खोल के रूप में यह क्रियान्वित कर रहे हैं । यह उत्पादन फ़ाइल की सामग्री द्वारा की पुष्टि की है /bin/bash -l -c -x 'source ~/.bashrc; echo $EDITOR > /tmp/cronjob.test' द्वारा:

+ source /home/plee/.bashrc 
++ '[' -z '' ']' 
++ return 

source ~/.bashrc काम करे, इसके लाइन है कि ~/.bashrc में PS1 चर की उपस्थिति के लिए जाँच करता है बाहर टिप्पणी:

#[ -z "$PS1" ] && return 

यह bash कर देगा ~/.bashrc की संपूर्ण सामग्री को cron

+6

या '.bashrc' फ़ाइल स्रोत 'से पहले कुछ मनमाने ढंग से मूल्य के लिए' $ PS1' सेट करें; इस तरह आपको '.bashrc' को बदलने की ज़रूरत नहीं है। –

+0

यह मेरे लिए काम करता है - मुझे नहीं पता कि यह इस तरह से क्यों सेट किया गया था, लेकिन ऐसा लगता है कि अन्य सामानों की कोशिश करने के कुछ घंटों बाद यह चाल चल रही है! – Avishai

+0

यह किसी कारण से मेरे लिए डेबियन पर काम नहीं करता है। मुझे अभी भी cronjobs में '~ .bashrc' नहीं मिलता है। – chovy

1

मैं बस केवल एक लाइन export EDITOR=vim के साथ एक फ़ाइल .env_setup_rc फ़ाइल की कोशिश की, आश्चर्यजनक रूप से यह काम कर रहा।

तो मुझे लगता है कि क्रॉन जॉब बैश कमांड के साथ .bashrc में कुछ ऐसा है।

8

@alex द्वारा प्रदान किया गया उत्तर सही है लेकिन उबंटू 13.10 में कोड थोड़ा संशोधित किया गया है। कोई $ PS1 वैरिएबल नहीं है लेकिन लाइनों में 6-9 है कोड

case $- in 
    *i*) ;;  
    *) return;; 
esac 

बस काम करने वाली रेखा को टिप्पणी करते हुए। यानी नीचे दिया गया कोड

case $- in 
    *i*) ;;  
# *) return;; 
esac 
संबंधित मुद्दे