# क्रॉन जॉब्स सेट अप करना और प्रबंधित करना

Source: https://support.kapsulehost.com/hi-in/cron-jobs

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

## KPanel में क्रॉन कहां मिलता है

क्रॉन एक साइट से संबंधित होता है, इसलिए आप इसे मुख्य मेनू की बजाय साइट से एक्सेस करते हैं:

1. [KPanel](https://kpanel.kapsulehost.com) में साइन इन करें और बाईं साइडबार में **वेबसाइटें** पर क्लिक करें।
2. अपनी वांछित साइट पर क्लिक करें।
3. साइट के अपने मेनू में, **सेटिंग्स** खोलें, फिर **Cron**।

सीधा पता `/websites/<site-id>/cron` है। आपको मौजूदा जॉब्स की एक तालिका दिखाई देगी, या यदि साइट में कोई जॉब नहीं है तो एक खाली स्थिति दिखाई देगी।

![KPanel में किसी साइट के लिए क्रॉन पेज, जिसमें उस साइट पर शेड्यूल की गई जॉब्स सूचीबद्ध हैं](https://support.kapsulehost.com/help/screenshots/cron-jobs.13aef775.webp)

## एक जॉब जोड़ना

ऊपर दाईं ओर **Cron जॉब जोड़ें** पर क्लिक करें। फॉर्म में तीन फ़ील्ड हैं।

### शेड्यूल

छह प्रीसेट बटन आपके लिए व्यंजक भर देते हैं:

| बटन | व्यंजक |
|---|---|
| हर मिनट | `* * * * *` |
| हर 5 min | `*/5 * * * *` |
| हर घंटे | `0 * * * *` |
| दैनिक 2AM | `0 2 * * *` |
| साप्ताहिक रविवार | `0 2 * * 0` |
| मासिक 1 तारीख | `0 2 1 * *` |

या अपना खुद का **Cron व्यंजक** में टाइप करें। क्रम में पांच फ़ील्ड हैं: मिनट, घंटा, महीने का दिन, महीना, सप्ताह का दिन:

```
minute  hour  day-of-month  month  day-of-week
```

- `0 3 * * *` हर दिन सुबह 3:00 बजे चलता है।
- `*/15 * * * *` हर पंद्रह मिनट में चलता है।
- `0 9 * * 1` हर सोमवार सुबह 9:00 बजे चलता है।
- `30 1 1 * *` हर महीने की पहली तारीख को सुबह 1:30 बजे चलता है।
- `0 */6 * * *` हर छह घंटे में, ठीक घंटे पर चलता है।

### लेबल

एक ऐसा नाम जिसे आप बाद में पहचान सकें, जैसे `WordPress cron` या `Nightly stock sync`। यह वही है जो जॉब्स तालिका आपको दिखाती है, इसलिए इसे वर्णनात्मक बनाएं: `job 3` रात 2 बजे किसी की मदद नहीं करता।

### कमांड

चलाने के लिए शेल कमांड। जॉब बनाने के लिए **Save** पर क्लिक करें।

> **Warning:** पूर्ण पथों का उपयोग करें। क्रॉन न्यूनतम वातावरण के साथ चलता है और आपकी शेल प्रोफ़ाइल में से कुछ भी नहीं, इसलिए एक सीधा `php` या कोई सापेक्ष डायरेक्टरी जो SSH पर लॉग इन होने पर काम करती है, यहां चुपचाप विफल हो जाएगी। पूरा पथ हर बार लिखें।

## कमांड लिखना

जॉब्स आपकी साइट के अपने सिस्टम यूज़र के रूप में चलते हैं, इसलिए आपकी होम डायरेक्टरी सही आधार है और `~` सही ढंग से हल होता है। आपकी साइट की फ़ाइलें यहां रहती हैं:

```
~/htdocs/yourdomain.co.nz
```

आप साइट के **सेटिंग्स** टैब में, फिर **SFTP** टैब में सटीक पथ की पुष्टि कर सकते हैं, जो इसे **साइट फ़ाइलें** के अंतर्गत प्रिंट करता है।

सामान्य कमांड:

```
cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now
```

```
cd ~/htdocs/yourdomain.co.nz && /usr/bin/php bin/send-queued-emails.php
```

```
/usr/bin/curl -fsS https://yourdomain.co.nz/api/nightly-report
```

> **Tip:** शेड्यूल करने से पहले कमांड का परीक्षण करें। यदि यह `wp` कमांड है तो इसे साइट के **WordPress** टैब में, फिर **Console** अनुभाग में पेस्ट करें, या इसे SSH पर चलाएं। जो जॉब कभी काम करने वाली ही नहीं थी, उसे रात 3 बजे लॉग फ़ाइल में देखने की तुलना में प्रॉम्प्ट पर पहचानना कहीं आसान है।

## WordPress के अंतर्निहित शेड्यूलर को बदलना

WordPress अपने खुद के छद्म-शेड्यूलर, WP-Cron के साथ आता है, जो तभी चलता है जब कोई पेज लोड करता है। किसी शांत साइट पर, शेड्यूल की गई पोस्टें देर से प्रकाशित होती हैं और ईमेल बिना भेजे कतार में जमा हो जाते हैं। किसी व्यस्त साइट पर, हर आगंतुक को शेड्यूल जांचने की लागत चुकानी पड़ती है।

एक वास्तविक क्रॉन जॉब दोनों समस्याओं को ठीक करती है। KPanel आपके लिए पूरा बदलाव कर देता है:

1. साइट खोलें, फिर **WordPress** टैब खोलें।
2. **WP-Cron** अनुभाग खोलें।
3. **सिस्टम cron सक्षम करें** पर क्लिक करें।

इससे एक शेड्यूल जुड़ जाता है जो हर पांच मिनट में WP-Cron चलाता है और `DISABLE_WP_CRON` सेट करता है ताकि पेज लोड होने से यह ट्रिगर होना बंद हो जाए। उसी स्क्रीन पर **सिस्टम cron हटाएं** दोनों हिस्सों को वापस पलट देता है।

यदि आप इसे स्वयं करना चाहें, तो यह दो चरणों में है:

**आगंतुक द्वारा ट्रिगर होने वाले संस्करण को निष्क्रिय करें।** इसे `wp-config.php` में, `/* That's all, stop editing! */` पंक्ति के ऊपर, **सेटिंग्स** में फिर **फाइल मैनेजर** का उपयोग करते हुए जोड़ें:

```php
define( 'DISABLE_WP_CRON', true );
```

**वास्तविक जॉब जोड़ें।** **सेटिंग्स** में, फिर **Cron** में:

- शेड्यूल: `*/5 * * * *`
- लेबल: `WordPress cron`
- कमांड: `cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now`

> **Warning:** `DISABLE_WP_CRON` वाले हिस्से को न छोड़ें। दोनों के चलने पर, हर शेड्यूल किया गया कार्य दो बार चल सकता है: डुप्लिकेट ईमेल, डुप्लिकेट ऑर्डर प्रोसेसिंग, सब्सक्रिप्शन प्लगइन पर डुप्लिकेट शुल्क। WP-Cron अनुभाग में एक क्लिक वाली कार्रवाई का उपयोग करें और यह आपके साथ नहीं हो सकता।

## WooCommerce और बैकग्राउंड क्यू

WooCommerce ऑर्डर स्थिति परिवर्तनों, सब्सक्रिप्शन नवीनीकरणों, ईमेल और स्टॉक अपडेट के लिए एक बैकग्राउंड क्यू का उपयोग करता है। यह WP-Cron पर निर्भर करता है, इसलिए यह ठीक वही कार्यभार है जो किसी शांत स्टोर पर प्रभावित होता है।

एक बार वास्तविक शेड्यूल लागू हो जाने पर, क्यू को हर पांच मिनट में प्रोसेस किया जाता है। इसे wp-admin में **WooCommerce**, फिर **Status**, फिर **Scheduled Actions** पर देखें।

उच्च मात्रा वाला स्टोर `*/2 * * * *` पर जा सकता है। इससे कम जाने से शायद ही कभी मदद मिलती है: आप काम करने से ज़्यादा समय प्रक्रियाएं शुरू करने में खर्च करते हैं। देखें [WooCommerce सेट अप करना](https://support.kapsulehost.com/hi-in/wordpress-woocommerce)।

## मौजूदा जॉब्स का प्रबंधन

जॉब्स तालिका **Label**, **Schedule**, **Command**, **आखिरी रन** और **Status** दिखाती है, जिसमें प्रत्येक पंक्ति पर दो कार्रवाइयां होती हैं:

- **Disable** किसी जॉब को हटाए बिना रोक देता है, और इसे वापस लाने के लिए **Enable** में बदल जाता है। इसका उपयोग तब करें जब आप परीक्षण कर रहे हों कि कोई जॉब समस्या पैदा कर रही है या नहीं।
- **Delete** इसे स्थायी रूप से हटा देता है। आपसे पुष्टि के लिए कहा जाता है, और शेड्यूल किए गए रन तुरंत बंद हो जाते हैं।

> **Important:** किसी क्रॉन जॉब को हटाना वापस नहीं लिया जा सकता। शेड्यूल उसी समय सर्वर से हटा दिया जाता है। यदि आप इसे केवल अस्थायी रूप से रोकने की कोशिश कर रहे हैं, तो **Disable** का उपयोग करें।

## आउटपुट ढूंढना

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

वह लॉग लगभग हर "क्या मेरी जॉब चली?" प्रश्न का उत्तर है, क्योंकि यह रिकॉर्ड करता है कि कमांड ने क्या प्रिंट किया और उसने कोई त्रुटि उठाई या नहीं।

इसे पढ़ने के लिए, SSH पर कनेक्ट करें और `~/cron-logs/` में देखें। SSH कुंजी प्रमाणीकरण का उपयोग करता है, इसलिए पहले साइट के **सेटिंग्स** टैब में, फिर **SSH कुंजियां** टैब से अपनी सार्वजनिक कुंजी जोड़ें: देखें [SSH कुंजियां जोड़ना](https://support.kapsulehost.com/hi-in/adding-ssh-keys)।

> **Note:** फाइल मैनेजर और SFTP खाते आपकी साइट डायरेक्टरी, `~/htdocs/yourdomain.co.nz` तक सीमित हैं, और `cron-logs` इससे एक स्तर ऊपर स्थित है। यह जानबूझकर है: यह SFTP एक्सेस वाले किसी ठेकेदार को वेबसाइट को छोड़कर बाकी सब चीज़ों से बाहर रखता है। लॉग तक पहुंचने के लिए नेटिव SSH का उपयोग करें, या आउटपुट को नीचे दिखाए अनुसार अपनी साइट डायरेक्टरी में रीडायरेक्ट करें।

यदि आप चाहते हैं कि आउटपुट कहीं ऐसी जगह हो जिसे फाइल मैनेजर खोल सके, तो इसे स्वयं रीडायरेक्ट करें:

```
cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now >> ~/htdocs/yourdomain.co.nz/wp-content/cron.log 2>&1
```

`2>&1` त्रुटियों को सामान्य आउटपुट के समान फ़ाइल में भेजता है। इसके बिना, त्रुटियां कहीं नहीं जातीं।

> **Warning:** आपकी साइट डायरेक्टरी के अंदर कुछ भी संभावित रूप से वेब पर अनुरोधित किया जा सकता है। एक रीडायरेक्ट किए गए लॉग को साइट रूट पर रखने की बजाय `wp-content` के अंतर्गत रखें, इसे ऐसा नाम दें जिसका कोई अनुमान न लगा सके, और डीबगिंग समाप्त होने के बाद इसे हटा दें।

## अच्छी प्रथाएं

- **अपने शेड्यूल को अलग-अलग समय पर रखें।** छह जॉब्स जो सभी `0 2 * * *` पर सेट हैं, सभी एक साथ शुरू होती हैं। उन्हें फैलाएं: `0 2`, `10 2`, `20 2`।
- **जब तक वास्तव में ज़रूरत न हो, हर मिनट का उपयोग न करें।** `*/5` लगभग हर चीज़ के लिए पर्याप्त है, जिसमें WordPress और WooCommerce शामिल हैं।
- **जॉब्स को छोटा रखें।** जो जॉब अपने अंतराल से अधिक समय लेती है वह अगले रन के साथ ओवरलैप हो जाएगी।
- **शोर मचाने वाली किसी भी चीज़ के लिए आउटपुट को रीडायरेक्ट करें**, ताकि एक बातूनी जॉब आपकी डिस्क को न भर दे।
- **सूची की कभी-कभार समीक्षा करें।** किसी हटाए गए प्लगइन से बची हुई जॉब्स चलती रहती हैं।

## समस्या निवारण

**जॉब कभी नहीं चलती लगती है।** पहले पथ जांचें। लॉग फ़ाइल खोलें। फिर पुष्टि करें कि स्थिति **Active** है और **Disabled** नहीं है। फिर उसी कमांड को SSH पर चलाएं और देखें कि वह क्या कहता है।

**लॉग में "command not found"।** एक पूर्ण पथ गायब है। सीधे नाम की बजाय `/usr/bin/php`, `/usr/bin/wp`, `/usr/bin/curl` का उपयोग करें।

**अनुमति अस्वीकृत।** जॉब आपकी साइट के सिस्टम यूज़र के रूप में चलती है। उस यूज़र को उन सभी चीज़ों का स्वामी होना चाहिए, या कम से कम पढ़ने में सक्षम होना चाहिए, जिन्हें कमांड छूता है। [फाइल मैनेजर का उपयोग करना](https://support.kapsulehost.com/hi-in/file-manager) में अनुमतियां जांचें।

**WordPress के कार्य अभी भी देर से चलते हैं।** पुष्टि करें कि स्वैप के दोनों हिस्से मौजूद हैं: शेड्यूल **सेटिंग्स** में, फिर **Cron** में मौजूद है, और `DISABLE_WP_CRON` सेट है। **WordPress** टैब पर **WP-Cron** अनुभाग दोनों की वर्तमान स्थिति दिखाता है।

**जॉब चलती है लेकिन उस दौरान साइट धीमी हो जाती है।** इसे किसी शांत समय पर ले जाएं, या काम को छोटे बैचों में विभाजित करें। साइट स्तर का संसाधन उपयोग **प्रदर्शन** के अंतर्गत दिखाई देता है: देखें [वेबसाइट की गति सुधारना](https://support.kapsulehost.com/hi-in/website-speed)।

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