2010-10-08 15 views
6

मेरे पास क्रॉन द्वारा चलाने के लिए कई PHP फ़ाइलें हैं। डेटाबेस प्रश्नोंक्रॉन चल रहा है लेकिन कार्यक्षमता काम नहीं कर रही है

#(Updating tutor activities) - every minute 
* * * * * /usr/bin/wget -O - -q -t 1 http://project/cron/tutor_activities.php 

लेकिन कार्यक्षमताओं में से कोई भी काम कर रहे हैं (भेजने -: मैं crons इस तरह कमान

crontab crontab.txt 

crontab.txt फ़ाइल के अंदर, मैं लिखा है क्रॉन आदेशों का उपयोग कर सेट अनुस्मारक मेल इत्यादि)। यूआरएल चलाना मैन्युअल रूप से काम करता है।

फिर मैंने अपना मेल पता MAILTO में रखा और मेल प्राप्त किए। मेल में, मुझे पृष्ठ के पूरे HTML स्रोत प्राप्त हुए। मेल में क्या उम्मीद है? मेरी कार्यक्षमता क्यों काम नहीं कर रही हैं?

अपडेट
अगर मैं

#(Updating tutor activities) - every minute 
    * * * * * /usr/bin/wget http://project/cron/tutor_activities.php 

अब तक कोई सफलता के लिए मेरी क्रॉन आदेशों बदल सकते हैं और यह अपने मेल में आता है -

--15:03:01-- http://project/cron/tutor_activities.php 
      => `tutor_activities.php' 
Resolving project... IP Address 
Connecting to test.project|IP Address|:80... connected. 
HTTP request sent, awaiting response... 301 Moved Permanently 
Location: http://project./ [following] 
--15:03:01-- http://project./ 
      => `index.html.1' 
Resolving project.... IP Address 
Connecting to project.|IP Address|:80... connected. 
HTTP request sent, awaiting response... 302 Found 
Location: http://project/home/ [following] 
--15:03:01-- http://project/home/ 
      => `index.html.1' 
Resolving project... IP Address 
Connecting to wproject|IP Address|:80... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: unspecified [text/html] 
index.html.1 has sprung into existence. 
Retrying. 

और index.html.1 के बहुत सारे, index.html.2 फाइलों में जमा कर रहे हैं मेरी परियोजना की जड़। मैं नहीं चाहता कि ये फाइलें बनें। बस फ़ाइलों को निष्पादित करना चाहते हैं। php:: आदेश नहीं मिला

* * * * * /usr/bin/wget http://project/cron/tutor_activities.php 

    * * * * * wget http://project/cron/tutor_activities.php 

phpMAILTO साथ कमांड सेट भेजता है मुझे इस त्रुटि/bin/श चल रहा है -

एक ही परिणाम है कि अगर मैं दो आदेशों में से किसी का उपयोग करें।

* * * * * php /path/to/test.php 

तो, मैं php कमांड का उपयोग करने में सक्षम नहीं हूं।

मैंने अपने test.php के अंदर एक साधारण mailto() लिखा है। क्रॉन के माध्यम से चलने पर मेल नहीं आता है (wget और php दोनों का उपयोग विफल रहता है) लेकिन यूआरएल चलाना मैन्युअल रूप से काम करता है।

मेरे समस्या
इसे फिर से स्पष्ट है, अपने मुख्य समस्या यह है कि क्रॉन फाइलों के अंदर कार्यक्षमता नहीं चल रहा है है बनाने के लिए। फाइलों का निर्माण एक माध्यमिक मुद्दा है।

किसी भी मदद की सराहना की जाएगी

धन्यवाद,
Sandeepan

+0

इन प्रश्नों को चलाने, मेल भेजने, आदि करने के लिए आपको अपने वेब सिस्टम पर लॉग इन करने की आवश्यकता नहीं है, क्या आप? –

+0

मुझे स्वयं समाधान मिला है। मैं स्वीकार करता हूं कि मेरे प्रश्न का ब्योरा किसी के लिए वास्तविक कारण अनुमान लगाने के लिए पर्याप्त नहीं था। लेकिन, वह खुद ही समस्या थी। लेकिन आपके प्रयासों के लिए सभी को धन्यवाद। मैं मैन्युअल रूप से किसी को भी बक्षीस नहीं दे रहा हूं। वोटों को बक्षीस का फैसला करने दें। –

उत्तर

1

मुझे समस्या खुद मिल गई। मैंने अपनी क्रॉन्टाब फ़ाइल में एक ही यूआरएल नहीं लगाया जिसे मैं मैन्युअल रूप से चला रहा था और यह मेरी गलती थी।

मैन्युअल मैं सिर्फ URL में परीक्षण टाइपिंग गया था चल रहा है, वहीं बचाया यूआरएल की मेरी ब्राउज़रों की सूची प्रदर्शित होने गया था और मैं यूआरएल http://www.test.project.com/cron/tutor_activities.php का चयन किया गया था, लेकिन crontab फ़ाइल में मैं http://test.project.com/cron/tutor_activities.php रखा था। मैं गलती से संभालने था इस http://www.test.project.com/cron/tutor_activities.php चल पाएंगे

(क्योंकि हम www जोड़ने के लिए एक पुनर्लेखन नियम वर्तमान है) लेकिन पुनर्लेखन नियम http://www.test.project.com/home करने के लिए इसे पुनः निर्देशित किया गया था। यही कारण है कि मेल में एचटीएमएल सामग्री।

तो, यहां सीखने की सबसे महत्वपूर्ण बात यह सुनिश्चित करना है कि हम मिनट की चीजों को याद न करें और यह न मानें कि हमने सबकुछ ठीक से किया है। मेरे मामले में, काम करने वाले यूआरएल को क्रॉन फाइल में कॉपी-पेस्ट करना बेहतर है।

7

अगर आप cronjob के रूप में एक यूआरएल कॉल करना चाहते हैं, तो आप wget तरह somthing का उपयोग करना होगा। अगर यह अपने सर्वर पर एक php स्क्रिप्ट है यह php /...pathtomyscript.../cron/tutor_activities.php

+0

@oezi, उत्तर के लिए धन्यवाद, मैं पहले से ही wget का उपयोग कर रहा हूं और मेरी wget में '-O--q -t' भाग है, जहां तक ​​मुझे याद है फ़ाइलों को आउटपुट नहीं करना है। कृपया मेरा अपडेट जांचें। अगर मैं '-O--q -t' हटा देता हूं तो प्रत्येक क्रॉन रन फ़ाइल बनाता है। मुझे वह नहीं चाहिए। –

+0

आप "wget ​​myurl>/dev/null" (या ऐसा कुछ, सटीक वाक्यविन्यास नहीं जानते) करने का प्रयास कर सकते हैं जो वैकल्पिक पैरामीटर के बिना "सामान्य" wget करेगा और/dev/शून्य – oezi

+0

@oezi चल रहा है '* * * * * php/path/to/test.php'' MAILTO 'सेट के साथ मुझे यह त्रुटि भेजता है'/bin/sh: php: कमांड नहीं मिला '। मैंने अपने test.php के अंदर एक सरल 'मेल() 'लिखा है। क्रॉन के माध्यम से चलने पर मेल नहीं आता है (दोनों wget और php का उपयोग करके) लेकिन यूआरएल चलाना मैन्युअल रूप से काम करता है। –

1

उपयोग करने के लिए जब आप -O साथ wget फोन आसान होगा -, यह stdout के लिए डाउनलोड की गई सामग्री है, जो क्रॉन ई-मेल संदेश के माध्यम से आप के लिए भेज रहा है भेज देंगे । पहले मामले में, यह वही कर रहा है जो इसे करना चाहिए।

जब आप -O पैरामीटर को wget witout कहते हैं, तो डाउनलोड की गई सामग्री को उसी पृष्ठ की फ़ाइल के रूप में सहेजने का प्रयास किया जाएगा जैसा कि वेब पेज डाउनलोड किया जा रहा है। यदि यह अस्तित्व में है, तो यह आपके द्वारा देखी गई नाम में वृद्धिकर्ता को जोड़ देगा। इस दूसरे मामले में, यह वही कर रहा है जो इसे करना चाहिए।

यह आपके सवाल का जहां उत्पादन जाना चाहता हूँ से स्पष्ट नहीं है, लेकिन यदि आप एक ही फ़ाइल हर बार करने के लिए उत्पादन को बचाने -O myfilename.html उपयोग करना चाहते हैं।

+0

मैं नहीं चाहता कि ये फ़ाइलें बनें। मैं सिर्फ फाइलों को निष्पादित करना और परिणाम देना चाहता हूं। लेकिन चूंकि परिणाम नहीं आ रहे हैं (डेटाबेस परिवर्तन, मेल नहीं जा रहे हैं)। –

+0

ठीक है, आपका अधिकांश सवाल wget के आउटपुट के बारे में था, यह स्पष्ट नहीं था कि आप इसके बारे में भी परवाह नहीं करते हैं। मैं निश्चित रूप से tutor_activities.php पर कुछ सर्वर-साइड लॉगिंग डीबगिंग जोड़कर आगे बढ़ूंगा। अगर इसे बिल्कुल बुलाया जा रहा है, तो उसे किसी भी तरह से बुझाने से कोई फर्क नहीं पड़ता। –

1

क्रॉन/कमांड लाइन से आपके चल पीएचपी सुनिश्चित करें कि आप php निष्पादन

1

यह पूरी तरह संभव है कि PHP क्रॉन पर्यावरण के भीतर रास्ते में नहीं है का पूर्ण पथ डाल करते हैं - यह निश्चित रूप से एक ही है करने के लिए नहीं जा रहा है अपने नियमित खोल के रूप में सेटअप करें। दोनों php दुभाषिया और क्रॉन आदेश में PHP स्क्रिप्ट का निरपेक्ष पथ उपयोग करके देखें:

* * * * * /path/to/php /path/to/test.php 

फ़ाइलों के निर्माण के लिए के रूप में, आप बस अपने wget कमांड के लिए एक रीडायरेक्ट जोड़ने के लिए:

wget -O - ... http://....  > /dev/null 

-O - बलों को मानक आउटपुट में डाउनलोड करने के लिए कुछ भी लिखना है, जो क्रॉन तब आपको खुशी से ईमेल करेगा। कमांड के अंत में > /dev/null जोड़कर, यह आउटपुट स्काई में ग्रेट बिटबकेट पर जायेगा। यदि आप नहीं चाहते हैं कि wget के stderr आउटपुट को ईमेल किया गया हो, तो आप /dev/null के बाद 2&>1 भी जोड़ सकते हैं, जो आगे stderr को stdout पर रीडायरेक्ट करता है, जो अब/dev/null पर जा रहा है।

+0

+1। PHP निष्पादन योग्य के पूर्ण पथ को खोजने के लिए 'कौन सी php' का उपयोग करें। –

0

एक आसान और सुरक्षित (कोई tmp फ़ाइलें) जिस तरह से यह करने के लिए पार्टी की प्रक्रिया प्रतिस्थापन उपयोग करने के लिए है:

* * * * * bash -c "/path/to/php <(/usr/bin/wget -O - -q -t 1 http://project/cron/tutor_activities.php)" 

प्रक्रिया प्रतिस्थापन <() भीतर आदेश चलाता है और एक फाइल उद्देश्य यह है कि केवल दिख रहा है में उत्पादन डालता है वर्तमान प्रक्रिया से। क्रॉन से इसका उपयोग करने के लिए, सीधे बैश का आह्वान करें और इसे कमांड स्ट्रिंग के रूप में पास करें।

और जैसा कि अन्य ने उल्लेख किया है, PHP के पूर्ण पथ का उपयोग करें जिसे आप which php के साथ ढूंढ सकते हैं।

7

जो PHP

पथ जो दिया जाता है आदेश जो आप शैल के माध्यम से क्रॉन सेट कर रहे हैं क्रॉन file.If चलाने के लिए पारित हो जाता है के साथ रखा जाना चाहिए की कोशिश है, यह कोई समस्या नहीं होगी, लेकिन आश्वस्त होने के लिए, जब आप एक php पेज चलाने की कोशिश कर रहे हैं तो पूर्ण पथ देने का प्रयास करें।

/path/to/php/path/to/क्रॉन/लिपि/

कोशिश इस तरह से अपनी comand देने के लिए, यदि समस्या बनी रहती; चर्चा करने के लिए स्वतंत्र लग रहा है।

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