2009-05-14 14 views
10

मेरे पास एक php स्क्रिप्ट है जो http के माध्यम से एक फ़ाइल पढ़ती है (फ़ाइल अन्य डोमेन पर है)। जब भी वेबसाइट रीफ्रेश हो जाती है, तो मैं इसे इस फ़ाइल को दिन में केवल एक या दो बार पढ़ना चाहूंगा। क्या क्रॉन के साथ ऐसा करने का कोई और तरीका है? मैं क्रॉन कारण का उपयोग नहीं करना चाहता हूं, मैं इस व्यवहार को स्क्रिप्ट में ही सेट करना पसंद करता हूं .. इसलिए यह लचीला है, इसलिए मैं इसे हर बार क्रॉन सेट किए बिना कहीं भी उपयोग कर सकता हूं। धन्यवादमैं कुछ अंतराल में PHP स्क्रिप्ट कैसे चला सकता हूं (उदा। दिन में एक बार)?

उत्तर

7

यदि आप उपयोग क्रॉन का उपयोग नहीं करना चाहते हैं या नहीं चाहते हैं और पृष्ठ को एक्सेस होने पर ही इसे अपडेट करना ठीक है। आप HTTP अनुरोध के परिणाम को कैश कर सकते हैं और इसे केवल पृष्ठ लोड पर अपडेट कर सकते हैं यदि कैश एक दिन से बड़ा हो या जो भी अंतराल आप चुनते हैं।

+0

धन्यवाद, अब तक आप अकेले हैं जो समझ गए कि मैं क्रॉन की तुलना में अन्य तरीकों की तलाश में हूं। मैं यह कैश कैसे करूं? एपीसी क्या मतलब है? – Adriana

+0

एपीसी एक तेज़, इन-मेमोरी कैश प्रदान करने का एक तरीका है लेकिन एकमात्र तरीका नहीं है। अगर आप अपने कैश को मल्टीप्ल मशीनों में वितरित करने में सक्षम होना चाहते हैं तो memcached है। वैकल्पिक रूप से, आप बस एक प्रतिलिपि डीबी में डाल सकते हैं और किसी भी नई तकनीक को नहीं ला सकते हैं। –

+1

चीजों को कैश करने का सबसे आसान तरीका PHP के अंतर्निर्मित आउटपुट बफरिंग फ़ंक्शंस का उपयोग करना चाहिए। (http://www.php.net/manual/en/function.ob-start.php) – Alo

-1

आप उपयोग कर सकते हैं यदि आप एक * nix पर्यावरण पर कर रहे हैं cron jobs

1

आप एक Cronjob उपयोग कर सकते हैं। फिर आप कमांड लाइन द्वारा php स्क्रिप्ट चला सकते हैं।

php /someplace/somefile.php 

यदि आप हर दिन अपडेट करते हैं तो क्रोनबॉज निम्न होगा।

0 0 * 0 0 php /someplace/somefile.php 
3

तुम भी Web Based Cron का उपयोग आप एक समय अंतराल पर एक साइट को हिट करना चाहते हैं कर सकते हैं।

+0

मैं वेब आधारित क्रॉन का उपयोग कर रहा हूं क्योंकि मैं अपने होस्टिंग पैकेज पर वीपीएन को उचित नहीं ठहरा सकता था और मैं इससे बहुत खुश हूं।पॉइंटर –

-1

क्रॉन के साथ क्या गलत है?

आपके पास क्रॉन के साथ कुछ विकल्प हैं - आपके PHP को कमांड लाइन PHP दुभाषिया द्वारा बुलाया जा सकता है, या आप सर्वर पर अपने PHP को आमंत्रित करने के लिए wget या fetch या समकक्ष का उपयोग कर सकते हैं।

सामान्यतः, वेब सर्वर के संदर्भ में PHP से चलने वाले PHP में समय सीमा है कि यह कितनी देर तक निष्पादित हो सकता है, इसलिए आम तौर पर आप "पृष्ठभूमि" PHP थ्रेड को "बाद में" करने के लिए सेट नहीं कर सकते हैं।

+1

के लिए धन्यवाद, उन्होंने विशेष रूप से क्रॉन के विकल्प के लिए कहा, यही कारण है कि मैंने इस जवाब को कम किया। – Veehmot

12

मैं जब मैं क्रॉन के लिए उपयोग नहीं किया है अतीत में बात इस तरह का कार्य किया है: जब से तुम स्पष्ट रूप से यह है कि आप क्रॉन का उपयोग नहीं करना चाहते हैं

$lastRunLog = '/path/to/lastrun.log'; 
if (file_exists($lastRunLog)) { 
    $lastRun = file_get_contents($lastRunLog); 
    if (time() - $lastRun >= 86400) { 
     //its been more than a day so run our external file 
     $cron = file_get_contents('http://example.com/external/file.php'); 

     //update lastrun.log with current time 
     file_put_contents($lastRunLog, time()); 
    } 
} 
+0

चालाक तरीका है, अच्छा! हालांकि, मैं बफरिंग फ़ंक्शंस पर और अधिक देखूंगा क्योंकि मुझे इसकी आवश्यकता के लिए बेहतर लगता है। – Adriana

+0

लेकिन आपको उपरोक्त कोड अंतराल में सही करना है? मेरा मतलब है कि आपको किसी भी समय वर्तमान समय और आखिरी अवधि के बीच अंतर की जांच करना चाहिए। आप डब्ल्यू/ओ क्रॉन कैसे करते हैं? – user1512681

+0

आप अपने साइट आगंतुकों को इसे चला सकते हैं या इसे किसी अन्य सिस्टम से कॉल कर सकते हैं जिस पर आपके पास क्रॉन पर पहुंच है। – cOle2

1

, केवल दूसरा रास्ता ऐसा करने के लिए (क्रॉन के समान कुछ के बिना) अपनी स्क्रिप्ट को डिमन के रूप में सेट करना है। हालांकि, जब तक आपको वास्तव में डिमन्स प्रदान करने वाली लचीलापन की आवश्यकता नहीं होती है, तो क्रॉन बहुत आसान और सरल होता है।

यहां एक daemon walk-through है।

2

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

फिर, स्क्रिप्ट चलाने से पहले बस प्रत्येक दिन के लिए पंक्ति की संख्या जांचें।

0

आप systemd के साथ एक Linux distro उपयोग कर रहे हैं:

मैं वार्षिक आधारित नौकरियों का समय निर्धारण के लिए एक की जरूरत थी, आवेदन की स्वतंत्र (मामले में सिस्टम रिबूट या ऐसा कुछ भी), और मैं दिया गया था systemd Timers का उपयोग करने के लिए सुझाव। इस पर आर्क Wiki Page कुछ उदाहरण देता है।

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

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