fx Scheduling & CI
ENहिन्दी

Windows Task Scheduler / cron से स्क्रिप्ट रोज़ चलाना

⏱ 15 min

आप क्या सीखेंगे

  • शेड्यूल से पहले: स्क्रिप्ट को शेड्यूल लायक बनाएँ
  • अपना Python पाथ ढूँढें
  • Windows: एक batch फ़ाइल (सुझाया गया)

समझिए

1. शेड्यूल से पहले: स्क्रिप्ट को शेड्यूल लायक बनाएँ

शेड्यूल जॉब बिना किसी के देखे चलता है। इसलिए स्क्रिप्ट को चाहिए:

  • पूरे पाथ इस्तेमाल करे या किसी तय फ़ोल्डर से शुरू हो (यह अपने आप आपके प्रोजेक्ट फ़ोल्डर में शुरू नहीं होगी),
  • बिना सवाल पूछे चले (न input(), न पॉप-अप),
  • जो हुआ उसे फ़ाइल में लॉग करे,
  • कुछ फ़ेल हो तो एरर कोड के साथ बाहर निकले (बिना संभाले exception पर Python यह अपने आप करता है)।

पहले बिल्कुल वही कमांड नए टर्मिनल में चलाकर देखें। वहाँ नहीं चली, तो शेड्यूल पर भी नहीं चलेगी।

2. अपना Python पाथ ढूँढें

वर्चुअल एनवायरनमेंट वाला Python इस्तेमाल करें, ताकि सही लाइब्रेरी मौजूद हों:

OS पाथ कुछ ऐसा
Windows C:\Reports\monthly-report\.venv\Scripts\python.exe
Mac/Linux /home/divyesh/monthly-report/.venv/bin/python

3. Windows: एक batch फ़ाइल (सुझाया गया)

प्रोजेक्ट फ़ोल्डर में run_report.bat बनाएँ:

@echo off
cd /d C:\Reports\monthly-report
if not exist logs mkdir logs
".venv\Scripts\python.exe" monthly_report.py --input data\current --output reports\Sales_Report.xlsx >> logs\run.log 2>&1
  • cd /d प्रोजेक्ट फ़ोल्डर (और ड्राइव) में ले जाता है, ताकि relative पाथ चलें।
  • >> logs\run.log 2>&1 सामान्य आउटपुट और एरर दोनों लॉग फ़ाइल में जोड़ता है।

जाँचने के लिए एक बार डबल-क्लिक करें, फिर logs\run.log देखें।

4. Windows Task Scheduler (क्लिक से)

  1. Start मेन्यू → Task Scheduler → Create Task… ("Basic" नहीं, ताकि सारे विकल्प दिखें)।
  2. General: नाम Daily Sales Report। अगर PC लॉक रह सकता है तो Run whether user is logged on or not चुनें। Run with highest privileges सिर्फ़ ज़रूरत हो तब।
  3. Triggers → New: Daily, 9:00 AM। सोमवार–शनिवार के लिए Weekly चुनकर वे दिन टिक करें।
  4. Actions → New: Program/script: C:\Reports\monthly-report\run_report.bat। Start in: C:\Reports\monthly-report।
  5. Conditions: लैपटॉप के लिए "Start the task only if the computer is on AC power" हटाएँ। चाहें तो Wake the computer to run this task टिक करें।
  6. Settings: Run task as soon as possible after a scheduled start is missed टिक करें (9 बजे PC बंद था तो बाद में चल जाएगा)।
  7. OK → अपना Windows पासवर्ड डालें।

जाँच: टास्क पर राइट-क्लिक → Run। Last Run Result देखें: 0x0 मतलब सफल।

5. Windows: यही कमांड लाइन से

schtasks /Create /TN "Daily Sales Report" /TR "C:\Reports\monthly-report\run_report.bat" /SC DAILY /ST 09:00
schtasks /Run /TN "Daily Sales Report"
schtasks /Query /TN "Daily Sales Report" /V /FO LIST

6. Mac / Linux: cron

crontab -e से अपना शेड्यूल खोलें और एक लाइन जोड़ें:

0 9 * * 1-6 cd /home/divyesh/monthly-report && .venv/bin/python monthly_report.py --input data/current --output reports/Sales_Report.xlsx >> logs/run.log 2>&1

पाँच समय वाले फ़ील्ड:

फ़ील्ड वैल्यू मतलब
minute 0 मिनट 0 पर
hour 9 सुबह 9 बजे
day of month * हर दिन
month * हर महीने
day of week 1-6 सोमवार से शनिवार (0 = रविवार)

और उदाहरण: 30 18 * * * (रोज़ शाम 6:30), 0 9 1 * * (हर महीने की 1 तारीख़ सुबह 9), */15 * * * * (हर 15 मिनट)। अपना expression crontab.guru पर जाँचें।

crontab -l आपके जॉब की लिस्ट दिखाता है। cron कंप्यूटर का टाइम ज़ोन इस्तेमाल करता है — date से जाँचें।

Mac पर Documents या Desktop जैसे फ़ोल्डर पढ़ने के लिए cron को Full Disk Access (System Settings → Privacy & Security) चाहिए हो सकता है। macOS में launchd भी है, जो उसका अपना शेड्यूलर है, पर शुरुआत के लिए cron आसान है।

7. VBA और xlwings का क्या?

  • pandas/openpyxl स्क्रिप्ट बैकग्राउंड में ठीक चलती हैं।
  • जो कुछ Excel खोलता है (xlwings, स्क्रिप्ट से VBA), उसे लॉग-इन डेस्कटॉप सेशन चाहिए। इनके लिए "Run whether user is logged on or not" आमतौर पर फ़ेल होता है — "Run only when user is logged on" चुनें और यूज़र लॉग-इन रखें, या जॉब को pandas + openpyxl पर ले जाएँ।
  • VBA मैक्रो को ऐसी वर्कबुक खोलकर शेड्यूल कर सकते हैं जिसका Workbook_Open मैक्रो चलाकर Excel बंद कर दे — चल जाता है, पर नाज़ुक है। बिना निगरानी वाले जॉब के लिए Python बेहतर है।

8. समस्या सुलझाने की चेकलिस्ट

लक्षण संभावित कारण
हाथ से चलता है, शेड्यूल पर नहीं relative पाथ / "Start in" नहीं / गलत Python
ModuleNotFoundError venv की जगह सिस्टम का Python चला
लॉग में कुछ नहीं आउटपुट redirect नहीं हुआ (>> log 2>&1 नहीं)
चला ही नहीं PC स्लीप/बंद; टास्क disabled; पासवर्ड बदला
xlsx लिखते समय PermissionError रिपोर्ट फ़ाइल Excel में खुली थी

आम गलतियाँ

बिल्कुल वही कमांड हाथ से जाँचना छोड़ देना। venv के पूरे पाथ की जगह python लिखना। लॉग फ़ाइल न होना, जिससे फ़ेलियर दिखते ही नहीं।

अभ्यास

mediumमॉड्यूल 5 की अपनी monthly_report स्क्रिप्ट को अभी से 5 मिनट बाद रोज़ चलने के लिए शेड्यूल करें। लॉग और रिपोर्ट जाँचें, फिर सोमवार–शनिवार सुबह 9 बजे पर बदलें। जानबूझकर तोड़ें (इनपुट फ़ोल्डर का नाम बदलें) और पक्का करें कि एरर लॉग में दिखता है।
venv interpreter और absolute paths लें। IST host पर cron 0 9 * * 1-6, UTC host पर 30 3 * * 1-6 से सोमवार–शनिवार 9 AM IST चलेगा। stdout तथा stderr log करें। Input folder rename करने पर nonzero exit और traceback जाँचें; फिर folder ठीक करके schedule enable करें।

प्रश्नोत्तरी

2>&1 लॉग में क्या जोड़ता है?
सामान्य आउटपुट के साथ एरर मैसेज भी
सोमवार–शनिवार सुबह 9 बजे का cron expression?
0 9 * * 1-6
venv का python.exe पाथ क्यों?
ताकि शेड्यूल जॉब सही इंस्टॉल लाइब्रेरी इस्तेमाल करे
Windows Task Scheduler / cron से स्क्रिप्ट रोज़ चलाना · हिंदी | ExcelWalaa