2012-02-22 9 views
33

चलाने के लिए हर 12 घंटे चलाने के लिए मुझे यूनिक्स क्रॉन कमांड की आवश्यकता है।क्रॉन कमांड हर 12 घंटे

मेरे पास मेरे सर्वर में 500+ उप ब्लॉग हैं।

इस फ़ाइल में मैं हर 12 घंटे

http://*.mysite.com/somedir/index.php 

चलाने के लिए कहाँ * मेरे ब्लॉग की मेरी उप डोमेन है चाहता हूँ।

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

+0

आप क्या समझते नहीं हैं: 'crontab' का प्रारूप या PHP स्क्रिप्ट को कैसे एक्सेस/चलाने के लिए? –

+0

क्या आपके पास कहीं साइट्स की सूची है? ('*' का विस्तार क्या होना चाहिए?) – wildplasser

+0

क्या आप स्थानीय रूप से स्क्रिप्ट को चलाने के लिए चाहते हैं, या इसे किसी दूसरी मशीन से कॉल करना चाहते हैं? यदि आपके पास स्थानीय रूप से है तो आप आसानी से एक कमांड बना सकते हैं। प्रत्येक पृष्ठ पर एक कर्ल या wget को एक-एक करके कॉल करना थोड़ा कठिन साबित होगा। –

उत्तर

94

एक क्रोंटब फ़ाइल में उस अंतराल पर चलाने के लिए दिन, दिनांक और समय निर्दिष्ट करने के लिए पांच फ़ील्ड हैं।

*  *  * * *  command to be executed 
-  -  - - - 
|  |  | | | 
|  |  | | +----- day of week (0 - 6) (Sunday=0) 
|  |  | +------- month (1 - 12) 
|  |  +--------- day of  month (1 - 31) 
|  +----------- hour (0 - 23) 
+------------- min (0 - 59) 

मूल्य क्षेत्र में * ऊपर उस स्तंभ के लिए ब्रेसिज़ में के रूप में सभी वैध मान का मतलब है।

आप 0 1,13 * * * का उपयोग कर सकते हैं जिसका अर्थ है प्रत्येक 1AM और 1PM।

0 1,13 * * * rm /var/www/*/somedir/index.php > /home/someuser/cronlogs/some.log 2>&1 

जहां * को विभिन्न डोमेन नामों से प्रतिस्थापित किया जा सकता है।

+0

यह सबसे अच्छा जवाब है क्योंकि यह आपको दिखाता है कि मनमाने ढंग से घंटों के साथ ऐसा कैसे करें, न केवल 12 पीएम/12AM – corvuszero

+2

यह कुछ उत्कृष्ट ASCII आरेखण है, @NEW! – Beejamin

8

मान लें कि आपकी साइटें/var/www/sitename में रहती हैं और आपके पास/usr/bin/php में php shell इंस्टॉल है, आप आसानी से क्रॉन जॉब बना सकते हैं जो उन सभी फ़ाइलों को चलाता है।

रन

crontab -e

और जोड़ने के इस लाइन

42 */12 * * * /usr/bin/php /var/www/*/somedir/index.php >> ~/cronjob.log 2>&1 

*/var/www/*/somedir में यहां सिर्फ एक wildcart है। इसका मतलब है कि यह आपके/var/ww फ़ोल्डर में प्रत्येक निर्देशिका को पकड़ लेगा।

f.ex:

[[email protected] ~]$ ls -l temp 
total 28 
-rw-rw-r--. 1 jens jens 1641 Feb 21 16:12 somefile.py 
drwxrwxr-x. 2 jens jens 4096 Feb 22 15:10 test 
drwxrwxr-x. 2 jens jens 4096 Feb 22 15:10 test2 
drwxrwxr-x. 2 jens jens 4096 Feb 22 15:10 test3 
drwxr-xr-x. 8 jens jens 4096 Jan 27 10:21 emptydir 
-rw-rw-r--. 1 jens jens 548 Jan 27 16:15 Unsaved Document 1 

[[email protected] ~]$ ls temp/*/testfile.php 
temp/test2/testfile.php temp/test3/testfile.php temp/test/testfile.php 

आप देख सकते हैं, इस अस्थायी, अर्थात् फ़ोल्डर परीक्षण, test2 और test3 के प्रत्येक उप-फ़ोल्डर में testfile.php देता है। एम्प्टीडीर भी एक फ़ोल्डर है, लेकिन इसमें इसमें कोई testfile.php नहीं है, इसके साथ कुछ भी नहीं होगा।

+0

हाय मुझे यकीन नहीं है कि '*' मतलब क्या है इस पंक्ति में '/ var/www/*/somedir/index.php' आप चाहते हैं कि मैं कमांड का उपयोग करूँ या जैसा कि मुझे इसे अपने सबडोमेन के साथ बदलना है? – user1091558

+0

@ user1091558: यही वह है जिसे मैंने ओटी के तहत पूछा था। क्या आपके पास साइट्स (या स्क्रिप्ट की एक सूची) की एक सूची है? – wildplasser

+0

ओह मुझे खेद है। मैं वर्डप्रेस मल्टीसाइट का उपयोग कर रहा हूं। मेरे पास एक इंस्टॉलेशन के तहत 500+ ब्लॉग हैं। इसलिए मेरे पास केवल – user1091558

6

आपको किसी प्रकार की मास्टर-स्क्रिप्ट (क्रॉन द्वारा बुलाया गया) की आवश्यकता है, जो साइटों की सूची का विस्तार करता है, और "/ usr/bin/php /var/www/*/somedir/index.php" कहता है, जबकि '*' एक सूची प्रविष्टि द्वारा प्रतिस्थापित किया गया। यह एक शेलस्क्रिप्ट, एक पर्ल या पायथन लिपि, या यहां तक ​​कि एक php स्क्रिप्ट में भी किया जा सकता है। श के लिए यह हो सकता है: "*/12" मतलब करने के लिए उपयोग backticks, या read < file_with_all_the_names_in_it

5

: (untested)

#!/bin/sh 
cd /home/subdir/for/cron 

LIST="a b c d e f g h i j k l m o p q r s t u v w x y z" 

for x in $LIST; do 
    /usr/bin/php /var/www/${x}/somedir/index.php 2>$1 > /tmp/${x}.log 
done 

अगर वह सूची इस तरह hardcoded है करने के लिए असुविधाजनक है, वहाँ अन्य तरीके हैं "हर 12 घंटे।"

-1

उपयोग यह प्रत्येक 12 घंटे के बाद चलेगा * */12 * * * php/var/www /" आपका /cronfile.php

+1

यह 0 */12 * * */पथ/से/php /path/to/somedir/index.php होना चाहिए। यदि आप पहली स्थिति में तारांकन का उपयोग करना चाहते थे, तो यह हर 12 वें घंटे के हर मिनट चलाएगा। – davelupt

17

डोमेन "मुझे लगता है सही तरीका है ->1 */12 * * * (वास्तव में, मिनट की स्थिति में किसी भी नंबर पर आप सेट करते हैं चाल करना होगा)

-।।>* */12 * * * यह 24 घंटों में 12h पर हर मिनट और फिर से निष्पादित किया जाएगा

-2

->cron('0 */12 * * *');

यह क्रॉन शेड्यूलर को हर 12 घंटों में चलाएगा।

संबंधित मुद्दे