Theory
તમે ઊંઘતા હો ત્યારે ચાલતું કામ
તમે એવો script લખ્યો છે જે તમારા project ના folder નું backup લે છે. તમારે રોજ રાત્રે 2 વાગ્યે એને ચલાવવાનું યાદ રાખવું નથી; તમારે તો system જ એને તમારા વતી, આપોઆપ, સમયપત્રક પ્રમાણે ચલાવે એવું જોઈએ છે.
એ જ job scheduling છે. Linux તમને ત્રણ ઓજાર આપે છે: ભવિષ્યમાં એક જ વાર ચલાવવા માટે at, યંત્ર નવરું હોય ત્યારે ચલાવવા માટે batch, અને સમયપત્રક પ્રમાણે વારંવાર ચાલતાં કામ માટે crontab. વારંવાર ચાલતું ઓજાર, એટલે કે cron, જ ખરું ભારવાહક છે, અને એનું પાંચ ખાનાંનું સમયનું સ્વરૂપ જ અહીં શીખવાની મુખ્ય વાત છે.
At a glance
| Command | એ કામ ક્યારે ચલાવે છે |
|---|---|
| at TIME | એક વાર, ભવિષ્યના જણાવેલા સમયે (દા.ત. at 2am) |
| batch | એક વાર, જ્યારે system પરનો ભાર પૂરતો ઓછો હોય ત્યારે |
| crontab -e | વારંવાર, તમે સંપાદિત કરેલા સમયપત્રક પ્રમાણે |
| crontab -l | (તમારાં અત્યારનાં ગોઠવેલાં cron નાં કામોની યાદી આપે છે) |
Theory
cron નાં પાંચ ખાનાં
cron નું સમયપત્રક એટલે સમયનાં પાંચ ખાનાં, ડાબેથી જમણે વંચાય, અને પછી command:
મિનિટ કલાક મહિનાનો દિવસ મહિનો અઠવાડિયાનો વાર command
- મિનિટ: 0 થી 59
- કલાક: 0 થી 23 (24 કલાકનું ઘડિયાળ)
- મહિનાનો દિવસ: 1 થી 31
- મહિનો: 1 થી 12
- અઠવાડિયાનો વાર: 0 થી 6 (0 કે 7 એટલે રવિવાર, 1 એટલે સોમવાર)
કોઈ ખાનામાં *તારાચિહ્ન ``** હોય તો એનો અર્થ એ ખાનાની 'દરેક' કિંમત. એટલે તમે દરેક ખાનામાં બરાબર ક્યારે ચલાવવું એ કહીને સમયપત્રક બાંધો છો.
Practical
cron થી backup નો સમય ગોઠવવો
# 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
પાંચ ખાનાં ડાબેથી જમણે વાંચો
cron નું આખું કૌશલ્ય એ પાંચ ખાનાં ક્રમમાં વાંચવામાં જ છે: મિનિટ, કલાક, મહિનાનો દિવસ, મહિનો, અઠવાડિયાનો વાર. તારાચિહ્ન એટલે દરેક.
એટલે 30 6 * * 1 નો અર્થ થાય મિનિટ 30, કલાક 6, મહિનાનો ગમે તે દિવસ, ગમે તે મહિનો, અને વાર 1 (સોમવાર), એટલે કે દર સોમવારે 06:30 વાગ્યે. અને 0 0 * * * નો અર્થ થાય મિનિટ 0, કલાક 0, દરરોજ, એટલે કે દરરોજ મધરાતે. લીટીને સાદી ભાષામાં અને સાદી ભાષાને લીટીમાં ફેરવવાની ટેવ પાડો; પરીક્ષાના પ્રશ્નો અને ખરી ગોઠવણો બંને એ જ માંગે છે.
Quiz
કોઈ crontab માં આ લીટી છે: 0 22 * * 5 /home/riya/report.sh . report.sh ક્યારે ચાલશે?
- દરરોજ, દરેક કલાકની 22 મી મિનિટે
- દર શુક્રવારે 22:00 વાગ્યે (રાત્રે 10 વાગ્યે)
- દર મહિનાની 22 મી તારીખે
- દર 5 મિનિટે
Show the answer
દર શુક્રવારે 22:00 વાગ્યે (રાત્રે 10 વાગ્યે)
પાંચ ખાનાં ડાબેથી જમણે વાંચો: મિનિટ 0, કલાક 22, મહિનાનો દિવસ (ગમે તે), મહિનો (ગમે તે), અઠવાડિયાનો વાર 5. વાર 5 એટલે શુક્રવાર (0/7 એટલે રવિવાર, 1 એટલે સોમવાર, એટલે 5 એટલે શુક્રવાર). તેથી એ કલાક 22 અને મિનિટ 0 એ ચાલે છે, એટલે કે દર શુક્રવારે 22:00 વાગ્યે કે રાત્રે 10 વાગ્યે. વિકલ્પ A ખાનાં ખોટાં વાંચે છે: પહેલું ખાનું 0 એ મિનિટ છે અને 22 એ કલાક છે, જેમાંથી 22:00 મળે છે, નહીં કે 'દરેક કલાકની 22 મી મિનિટ'. વિકલ્પ C અઠવાડિયાના વાર (પાંચમું ખાનું) ને મહિનાના દિવસ (ત્રીજું ખાનું) સાથે ગૂંચવે છે; અહીંનો 22 એ કલાક છે અને 5 એ વાર છે. વિકલ્પ D 'દર 5 મિનિટે' એવો અર્થ ઉપજાવી કાઢે છે જે આ ખાનાં કહેતાં જ નથી. હંમેશા આ ક્રમમાં ઉકેલો: મિનિટ, કલાક, દિવસ, મહિનો, વાર.
Think first
cron ને બદલે at ક્યારે વાપરવો?
at અને cron બંને કામનો સમય ગોઠવે છે. કયું વાપરવું એ તમે કઈ રીતે નક્કી કરો? વિચારીને પછી tap કરો.
Show the answer
કામ ફરી ફરી થવાનું છે કે નહીં એના પરથી પસંદ કરો. એક જ વાર થનારા ભવિષ્યના કામ માટે at વાપરો, અને વારંવાર થનારા કામ માટે cron વાપરો. જો કંઈક પછીના કોઈ ચોક્કસ સમયે બરાબર એક જ વાર થવું જોઈએ, જેમ કે 'આજે રાત્રે 2 વાગ્યે આ સફાઈ ચલાવ' કે 'આવતા સોમવારે 9 વાગ્યે આ યાદ અપાવ', તો at બરાબર બંધબેસે છે: તમે એને એક જ સમય આપો છો, એ કામ એક વાર ચલાવે છે, અને વાત પૂરી. પણ જો કંઈક સમયપત્રક પ્રમાણે વારંવાર થવું જોઈએ, જેમ કે 'રોજ રાત્રે backup લે' કે 'દર શુક્રવારે રાત્રે 10 વાગ્યે report બનાવ', તો cron (crontab) જ ઓજાર છે, કારણ કે એ પાંચ ખાનાંથી વર્ણવેલા વારંવારના સમયપત્રક પ્રમાણે અનિશ્ચિત સમય સુધી ચાલતું રહે છે, જ્યાં સુધી તમે એને કાઢી ન નાખો. batch એ 'એક જ વાર' વાળા વિચારનો ખાસ પ્રકાર છે: એક વાર ચલાવવું, પણ નક્કી કરેલા સમયે નહીં, બલ્કે જ્યારે system કામમાં વ્યસ્ત ન હોય ત્યારે, જે એવા ભારે કામ માટે ઉપયોગી છે જેને તમે વપરાશકારો સાથે હરીફાઈમાં ઉતારવા માંગતા નથી. એટલે નિર્ણય સાવ સહેલો છે: સમયપત્રક પ્રમાણે વારંવાર થાય તો cron; નક્કી કરેલા સમયે એક વાર થાય તો at; યંત્ર નવરું પડે ત્યારે એક વાર થાય તો batch. કામની લયને અનુરૂપ ઓજાર પસંદ કરો.
Summary
Key takeaways
- Job scheduling તમે હાજર ન હો તો પણ commands ને આપોઆપ ચલાવે છે.
- at એ command ને ભવિષ્યના સમયે એક વાર ચલાવે છે; batch એને system પરનો ભાર ઓછો હોય ત્યારે એક વાર ચલાવે છે.
- crontab વારંવાર ચાલતાં કામનો સમય ગોઠવે છે (સંપાદન માટે crontab -e, યાદી માટે crontab -l).
- cron ની લીટીમાં સમયનાં પાંચ ખાનાં અને પછી command આવે છે: મિનિટ, કલાક, મહિનાનો દિવસ, મહિનો, અઠવાડિયાનો વાર.
- તારાચિહ્ન * એટલે 'દરેક'; અઠવાડિયાના વારમાં 0 કે 7 એટલે રવિવાર, 1 એટલે સોમવાર, 5 એટલે શુક્રવાર.
- દાખલો: 30 6 1 એ દર સોમવારે 06:30 વાગ્યે ચાલે છે; 0 0 * એ દરરોજ મધરાતે ચાલે છે.
- યાદ રાખવાની કડી: વારંવાર એટલે cron (પાંચ ખાનાં), નક્કી સમયે એક વાર એટલે at, નવરાશે એક વાર એટલે batch.