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