2012-03-09 16 views
31

मैं इस तरह एक क्रॉन जॉब में दो आदेशों है:एक क्रॉन नौकरी में क्रमशः दो आदेश चल रहा है?

mysql -xxxxxx -pyyyyyyyyyyv -hlocalhost -e "call MyFunction1";wget -N http://mywebsite.net/path/AfterMyFunction1.php 

लेकिन यह है कि उन दोनों को एक ही समय में चल रहे हैं मुझे लगता है।

मैं पहली कमांड कैसे चला सकता हूं और जब यह पूरा हो जाता है, तो दूसरा आदेश निष्पादित करें?

इसके अलावा AfterMyFunction1.php में जावास्क्रिप्ट http अनुरोध हैं जो Wget का उपयोग करते समय निष्पादित नहीं होते हैं। यह काम करता है अगर मैंने अपने वेबब्रोसर में AfterMyFunction1.php खोला।

+1

wget आपके पुनर्प्राप्त HTML पृष्ठों में एम्बेडेड जावास्क्रिप्ट को पार्स और निष्पादित करने में सक्षम नहीं है। wget पृष्ठ प्रस्तुत नहीं करता है यह सिर्फ सामग्री को पुनर्प्राप्त करता है। –

उत्तर

69

यदि पहले कमांड को पहले पूरा करने की आवश्यकता है, तो आपको उन्हें शेल में the && operator से अलग करना चाहिए। यदि पहला विफल रहता है, तो दूसरा नहीं चलेगा।

+8

यह एक स्क्रिप्ट बनाने के लिए आसान और अधिक रखरखाव लगता है जो लगातार कई फाइलें चलाता है और उस स्क्रिप्ट बनाम एक बड़ी सूची कमांड के साथ स्कैन करता है और – JustinP

+12

से अलग होता है यदि आपको केवल दो आदेश मिलते हैं तो मुझे नहीं लगता कि समस्या कहां है और यह फ़ाइल कैसे होगी मदद, आपको भी उस फ़ाइल (परमिट, स्टोर ...) का ख्याल रखना होगा, इसके लिए अधिक समय और अधिक लागत की आवश्यकता है। – BigDong

+0

मुझे नहीं लगता कि यह उत्तर सही है - अर्धविराम अनुक्रमिक रूप से आदेश चलाएगा, समानांतर में नहीं। इसलिए मुझे नहीं लगता कि ओपी की कमांड लाइन में कुछ भी गलत है। – nonagon

2

आप sem का उपयोग कर सकते हैं जो जीएनयू parallel का हिस्सा है।

0 0 * * * root sem --jobs 1 --id MyQueue mysql -xxxxxx -pyyyyyyyyyyv -hlocalhost -e "call MyFunction1" 
1 0 * * * root sem --jobs 1 --id MyQueue wget -N http://mywebsite.net/path/AfterMyFunction1.php 

यह क्रॉन config पहले शुरू कर देंगे mysqlsem के माध्यम से है, जो यह कतार की एक किस्म में रखा जाएगा MyQueue कहा जाता है। यह कतार शायद खाली हो जाएगी, इसलिए mysql तुरंत निष्पादित किया गया है। एक मिनट बाद, क्रॉन एक और sem शुरू करेगा जो एक ही कतार में wget रखेगा। --jobs 1 के साथ, sem को उस विशेष कतार में एक समय में केवल एक ही कार्य निष्पादित करने का निर्देश दिया गया है। जैसे ही mysql समाप्त हो गया है, दूसरा semwget कमांड चलाएगा। sem में कतारबद्ध व्यवहार को नियंत्रित करने के लिए बहुत सारे विकल्प हैं।

&& समाधान शायद बेहतर है, क्योंकि यह पहली बार विफल होने पर दूसरे आदेश को निष्पादित नहीं करेगा। sem समाधान का लाभ यह है कि आप एक अलग उपयोगकर्ता की तरह विभिन्न क्रॉन सेटिंग्स निर्दिष्ट कर सकते हैं। और क्रॉन अंतराल नौकरी की अवधि से कम है, तो यह ओवरलैपिंग क्रॉन नौकरियों को रोक देगा।