Theory
Work जो आपके सोते हुए चलता है
आपने एक script लिखी जो आपका project folder backup करती है। आप हर रात 2am पर इसे चलाना याद नहीं रखना चाहते; आप चाहते हैं system यह आपके लिए automatically, schedule पर, चलाए।
यही job scheduling है। Linux आपको तीन tools देता है: एक one-off future run के लिए at, machine idle होने पर चलाने के लिए batch, और उन jobs के लिए crontab जो एक timetable पर repeat होते हैं। Recurring वाला, cron, workhorse है, और इसका five-field time format यहाँ सीखने वाली main चीज़ है।
At a glance
| Command | यह Job कब चलाता है |
|---|---|
| at TIME | एक बार, एक specified future time पर (जैसे at 2am) |
| batch | एक बार, जब भी system load काफ़ी low हो |
| crontab -e | बार-बार, एक schedule पर जिसे आप edit करते हैं (timetable) |
| crontab -l | (आपके current scheduled cron jobs list करता है) |
Theory
पाँच Cron Fields
एक cron schedule पाँच time fields है, left से right पढ़ी जाती हुई, command के बाद:
minute hour day-of-month month day-of-week command
- minute: 0 से 59
- hour: 0 से 23 (24-hour clock)
- day-of-month: 1 से 31
- month: 1 से 12
- day-of-week: 0 से 6 (0 या 7 Sunday है, 1 Monday है)
एक field में एक *asterisk ``** का मतलब है उस field की 'हर' value। तो आप हर field में बताकर एक schedule build करते हैं, exactly कब fire करना है।
Practical
cron से Backup Schedule करना
# Edit your crontab:
$ crontab -e
# Add this line: run backup.sh at 06:30 every Monday
30 6 * * 1 /home/riya/backup.sh
# | | | | |
# | | | | +-- day-of-week: 1 = Monday
# | | | +---- month: * = every month
# | | +------ day-of-month: * = every day-of-month
# | +-------- hour: 6
# +----------- minute: 30 -> 06:30
# Run every day at midnight instead:
0 0 * * * /home/riya/backup.shFormula
पाँच Fields को Left से Right पढ़िए
cron की पूरी skill उन पाँच fields को order में पढ़ना है: minute, hour, day-of-month, month, day-of-week। Star का मतलब है हर।
तो 30 6 * * 1 है minute 30, hour 6, कोई भी day-of-month, कोई भी month, weekday 1 (Monday), यह है 06:30 हर Monday। और 0 0 * * * है minute 0, hour 0, हर day, यह है हर दिन midnight। एक line को plain English में और वापस translate करने में comfortable होइए; यही exam questions और real setups दोनों पूछते हैं।
Quiz
एक crontab में यह line है: 0 22 * * 5 /home/riya/report.sh। report.sh कब चलता है?
- हर hour के 22 minutes बाद, हर दिन
- 22:00 (10 pm) पर हर Friday
- हर महीने की 22 तारीख़ को
- हर 5 minutes में
Show the answer
22:00 (10 pm) पर हर Friday
पाँच fields को left से right पढ़िए: minute 0, hour 22, day-of-month (कोई भी), month (कोई भी), day-of-week 5। Day-of-week 5 Friday है (0/7=Sunday, 1=Monday, तो 5=Friday)। तो यह hour 22 minute 0 पर चलता है, जो 22:00 या 10 pm है, हर Friday। Option A fields को misread करता है: पहला field 0 minute है और 22 hour है, 22:00 देते हुए, 'हर hour के 22 minutes बाद' नहीं। Option C day-of-week (field 5) को day-of-month (field 3) से confuse करता है; यहाँ 22 hour है, और 5 weekday है। Option D एक 'हर 5 minutes' meaning invent करता है जो fields express नहीं करते। हमेशा minute, hour, day, month, weekday उसी order में parse कीजिए।
Think first
आप cron की बजाय at कब इस्तेमाल करते हैं?
at और cron दोनों jobs schedule करते हैं। आप कैसे decide करते हैं किसकी तरफ़ reach करें? फिर tap कीजिए।
Show the answer
इससे choose कीजिए कि job repeat करता है या नहीं। एक ONE-OFF future job के लिए at इस्तेमाल कीजिए, और एक RECURRING वाली के लिए cron। अगर आपको exactly एक बार एक specific बाद वाले time पर कुछ होना चाहिए, 'आज रात 2am पर यह cleanup चलाओ', 'अगले Monday 9 बजे यह reminder भेजो', तो at perfect है: आप इसे एक single time देते हैं, यह job एक बार चलाता है, और यह ख़त्म हो जाता है। इसके बजाय अगर आपको एक timetable पर बार-बार कुछ होना चाहिए, 'हर रात backup करो', 'हर Friday 10pm पर एक report generate करो', तो cron (crontab) tool है, क्योंकि यह उस recurring schedule पर fire करता है जो पाँच fields describe करते हैं, indefinitely, जब तक आप इसे remove नहीं करते। batch one-off idea का एक special case है: एक बार चलो, पर एक fixed time पर नहीं, बल्कि जब भी system busy न हो, उस heavy work के लिए useful जो आप users के साथ compete नहीं कराना चाहते। तो decision tree simple है: schedule पर repeat होता है -> cron; एक set time पर एक बार होता है -> at; machine free होने पर एक बार होता है -> batch। Job के rhythm से tool match कीजिए।
Summary
Key takeaways
- Job scheduling automatically commands चलाता है, आपके present हुए बिना।
- at एक command भविष्य में एक बार चलाता है; batch इसे एक बार चलाता है जब system load low हो।
- crontab recurring jobs schedule करता है (edit के लिए crontab -e, list के लिए crontab -l)।
- एक cron line में पाँच time fields हैं फिर command: minute, hour, day-of-month, month, day-of-week।
- एक asterisk * का मतलब है 'हर'; day-of-week 0 या 7 Sunday है, 1 Monday है, 5 Friday है।
- Example: 30 6 1 हर Monday 06:30 पर चलता है; 0 0 * हर दिन midnight पर चलता है।
- Memory hook: recurring -> cron (पाँच fields), एक time पर एक बार -> at, idle होने पर एक बार -> batch।