linux - मैं पर्यावरण चर सेट कर सकता हूं जो crontab का उपयोग करेगा?




unix environment-variables (7)

मेरे पास हर घंटे चलने वाला क्रॉन्टाब है। उपयोगकर्ता को चलाने वाले उपयोगकर्ता में .bash_profile में वातावरण .bash_profile होता है जो उपयोगकर्ता टर्मिनल से नौकरी चलाते समय काम करता है, हालांकि, जाहिर है कि यह क्रॉन्टाब द्वारा चलाए जाने पर उठाया नहीं जाता है।

मैंने उन्हें .profile और .bashrc में सेट करने का प्रयास किया है, लेकिन वे अभी भी उठाए गए प्रतीत नहीं होते हैं। क्या किसी को पता है कि मैं पर्यावरण के निशान कहां रख सकता हूं जो क्रोंटैब उठा सकता है?


'Cron' एक शेल स्क्रिप्ट चलाएं जो कमांड चलाने से पहले पर्यावरण सेट करता है।

हमेशा।

#   @(#)$Id: crontab,v 4.2 2007/09/17 02:41:00 jleffler Exp $
#   Crontab file for Home Directory for Jonathan Leffler (JL)
#-----------------------------------------------------------------------------
#Min     Hour    Day     Month   Weekday Command
#-----------------------------------------------------------------------------
0        *       *       *       *       /usr/bin/ksh /work1/jleffler/bin/Cron/hourly
1        1       *       *       *       /usr/bin/ksh /work1/jleffler/bin/Cron/daily
23       1       *       *       1-5     /usr/bin/ksh /work1/jleffler/bin/Cron/weekday
2        3       *       *       0       /usr/bin/ksh /work1/jleffler/bin/Cron/weekly
21       3       1       *       *       /usr/bin/ksh /work1/jleffler/bin/Cron/monthly

~ / Bin / cron में लिपियों को एक ही स्क्रिप्ट, 'रनक्रॉन' के सभी लिंक हैं, जो इस तरह दिखते हैं:

:       "$Id: runcron.sh,v 2.1 2001/02/27 00:53:22 jleffler Exp $"
#
#       Commands to be performed by Cron (no debugging options)

#       Set environment -- not done by cron (usually switches HOME)
. $HOME/.cronfile

base=`basename $0`
cmd=${REAL_HOME:-/real/home}/bin/$base

if [ ! -x $cmd ]
then cmd=${HOME}/bin/$base
fi

exec $cmd ${@:+"[email protected]"}

(पुराने कोडिंग मानक का उपयोग करके लिखा गया - आजकल, मैं शुरुआत में एक शेबांग '#!' का उपयोग करूंगा।)

'~ / .cronfile' क्रॉन द्वारा उपयोग के लिए मेरी प्रोफ़ाइल पर एक भिन्नता है - कठोर गैर-इंटरैक्टिव और शोर होने के लिए कोई गूंज नहीं। आप इसके बजाय .profile निष्पादित करने की व्यवस्था कर सकते हैं। (REAL_HOME सामान मेरे पर्यावरण का एक आर्टेफैक्ट है - आप दिखा सकते हैं कि यह $ HOME जैसा ही है।)

इसलिए, यह कोड उचित वातावरण को पढ़ता है और फिर मेरी होम निर्देशिका से कमांड के गैर-क्रोन संस्करण को निष्पादित करता है। तो, उदाहरण के लिए, मेरा 'सप्ताहांत' कमांड इस तरह दिखता है:

:       "@(#)$Id: weekday.sh,v 1.10 2007/09/17 02:42:03 jleffler Exp $"
#
#       Commands to be done each weekday

# Update ICSCOPE
n.updics

'दैनिक' आदेश सरल है:

:       "@(#)$Id: daily.sh,v 1.5 1997/06/02 22:04:21 johnl Exp $"
#
#       Commands to be done daily

# Nothing -- most things are done on weekdays only

exit 0

@Robert Brisita पर विस्तार करना अभी विस्तारित है, भले ही आप स्क्रिप्ट में प्रोफ़ाइल के सभी चर सेट अप नहीं करना चाहते हैं, आप स्क्रिप्ट के शीर्ष पर निर्यात करने के लिए चर का चयन कर सकते हैं

Crontab -e फ़ाइल में:

SHELL=/bin/bash

*/1 * * * * /Path/to/script/script.sh

Script.sh में

#!/bin/bash
export JAVA_HOME=/path/to/jdk

some-other-command

उबंटू में मेरे लिए /etc/environment में वर्स सेट करना भी मेरे लिए काम करता है। 12.04 तक, क्रोन के लिए / etc / वातावरण में चर लोड किए जाते हैं।


एक और तरीका - इस उत्तर से प्रेरित - चर "इंजेक्ट" करने के लिए निम्नलिखित है (fcron उदाहरण):

%daily 00 12 \
    set -a; \
    . /path/to/file/containing/vars; \
    set +a; \
    /path/to/script/using/vars

help set :

-ए मार्क वेरिएबल जिन्हें निर्यात के लिए संशोधित या बनाया गया है।

इनका झंडे बंद करने के बजाय + का उपयोग करना।

तो set - और set + बीच में सब कुछ env को निर्यात किया जाता है और फिर अन्य स्क्रिप्ट्स आदि के लिए उपलब्ध होता है। set का उपयोग set बिना चर को सोर्स किया जाता है लेकिन केवल set में रहता है।

इसके अलावा जब किसी प्रोग्राम को गैर रूट खाते को चलाने की आवश्यकता होती है तो चर को पार करने के लिए भी उपयोगी होता है लेकिन आपको उस अन्य उपयोगकर्ता के पर्यावरण के अंदर कुछ चर की आवश्यकता होती है। नीचे ई-मेल हेडर प्रारूपित करने के लिए नलमेलर वर्र्स में गुजरने वाला एक उदाहरण है:

su -s /bin/bash -c "set -a; \
                    . /path/to/nullmailer-vars; \
                    set +a; \
                    /usr/sbin/logcheck" logcheck

के बजाय

0  *  *  *  *  sh /my/script.sh

Bash -l -c का प्रयोग करें

0  *  *  *  *  bash -l -c '/my/script.sh'

जो भी आप crontab में सेट करते हैं, वह सीधे cronjobs में उपलब्ध होगा, दोनों स्क्रिप्ट में चर और चर का उपयोग कर।

Cronjob की परिभाषा में उनका प्रयोग करें

आप crontab को कॉन्फ़िगर कर सकते हैं ताकि यह वेरिएबल्स सेट कर सके जो तब cronjob उपयोग कर सकते हैं:

$ crontab -l
myvar="hi man"
* * * * * echo "$myvar. date is $(date)" >> /tmp/hello

अब फाइल /tmp/hello इस तरह की चीजें दिखाती है:

$ cat /tmp/hello 
hi man. date is Thu May 12 12:10:01 CEST 2016
hi man. date is Thu May 12 12:11:01 CEST 2016

Cronjob द्वारा संचालित स्क्रिप्ट में उनका इस्तेमाल करें

आप crontab को कॉन्फ़िगर कर सकते हैं ताकि यह चर सेट कर सके जो स्क्रिप्ट का उपयोग कर सकते हैं:

$ crontab -l
myvar="hi man"
* * * * * /bin/bash /tmp/myscript.sh

और स्क्रिप्ट / /tmp/myscript.sh कहें इस तरह है:

echo "Now is $(date). myvar=$myvar" >> /tmp/myoutput.res

यह एक फ़ाइल /tmp/myoutput.res दिखाता है:

$ cat /tmp/myoutput.res
Now is Thu May 12 12:07:01 CEST 2016. myvar=hi man
Now is Thu May 12 12:08:01 CEST 2016. myvar=hi man
...

मेरे लिए मुझे एक PHP अनुप्रयोग के लिए पर्यावरण चर सेट करना पड़ा। मैंने अपने क्रॉन्टाब में निम्न कोड जोड़कर इसे पुनः लोड किया।

$ sudo  crontab -e

crontab:

ENVIRONMENT_VAR=production

* * * * * /home/deploy/my_app/cron/cron.doSomethingWonderful.php

और अंदर के अंदर कुछ अद्भुत। php मैं पर्यावरण मूल्य के साथ मिल सकता है:

<?php     
echo $_SERVER['ENVIRONMENT_VAR']; # => "production"

आशा है कि ये आपकी मदद करेगा!





crontab