Cron એક્સપ્રેશન શું છે?
cron expression એ એક સઘન શેડ્યૂલિંગ સ્ટ્રિંગ છે જે જૉબ શેડ્યૂલરને બરાબર ક્યારે કોઈ કાર્ય ચલાવવું તે જણાવે છે. આ ફોર્મેટ 1975 માં Unix V7 cron ડિમનની અંદર જન્મ્યું હતું અને ત્યારથી ભાગ્યે જ બદલાયું છે — એ જ પાંચ-ક્ષેત્ર વ્યાકરણ આજે Kubernetes CronJobs, AWS EventBridge, GitHub Actions વર્કફ્લો, Google Cloud Scheduler, GitLab CI, Jenkins પાઇપલાઇન્સ, અને દરેક Linux વિતરણ સાથે હજુ પણ આવતા crontab બાઇનરીમાં દેખાય છે. વ્યાકરણ તેર કે તેટલા અક્ષરોમાં ઘણો અર્થ ભરી દે છે, એટલે જ એક પાર્સર જે તેને સાદા અંગ્રેજીમાં રૂપાંતરિત કરે છે તે આત્મવિશ્વાસપૂર્ણ ડિપ્લોય અને રાત્રે 3 વાગ્યાના રોલબૅક વચ્ચેનો તફાવત છે.
Cron એક્સપ્રેશન કેવી રીતે કામ કરે છે?
એક પ્રમાણભૂત cron expression માં પાંચ ખાલી-જગ્યાથી-અલગ થયેલાં ક્ષેત્રો હોય છે જે મળીને એક પુનરાવર્તિત શેડ્યૂલ વ્યાખ્યાયિત કરે છે. એન્જિન દર મિનિટે વર્તમાન દીવાલ ઘડિયાળને expression સામે તપાસે છે અને જ્યારે પાંચેય ક્ષેત્રો મેળ ખાય ત્યારે જૉબ ચલાવે છે. ક્ષેત્રો, ડાબેથી જમણે:
- મિનિટ (0–59). કલાકની અંદર કયા મિનિટે જૉબ ચાલે છે.
0નો અર્થ કલાક પર,30નો અર્થ સાડા પર,*/5નો અર્થ દર પાંચ મિનિટે (00, 05, 10, ...), અને15,45નો અર્થ સવા અને પોણા પર. - કલાક (0–23). 24-કલાકની ઘડિયાળ પર દિવસનો કયો કલાક.
0મધરાત છે,9સવારે 9 વાગ્યે છે,17સાંજે 5 વાગ્યે છે. શ્રેણીઓ (વ્યવસાયિક કલાકો માટે9-17) અને પગલા મૂલ્યો (દર બીજા કલાક માટે*/2) મિનિટ માટેની જેમ જ કામ કરે છે. - મહિનાનો દિવસ (1–31). કયા કૅલેન્ડર દિવસે ચલાવવું.
1નો અર્થ મહિનાની પહેલી,*નો અર્થ દરરોજ,1,15નો અર્થ પહેલી અને પંદરમી.31સાથે સાવધ રહો — તે 31મો દિવસ ન ધરાવતા મહિનાઓને ચૂપચાપ છોડી દે છે. - મહિનો (1–12 અથવા JAN–DEC). કયા મહિનાઓમાં ચલાવવું.
*નો અર્થ દર મહિને,1,7નો અર્થ જાન્યુઆરી અને જુલાઈ,1-3નો અર્થ ફક્ત Q1. મોટાભાગના અમલીકરણોમાં ત્રણ-અક્ષરના મહિનાનાં નામ કેસ-અસંવેદનશીલ હોય છે. - અઠવાડિયાનો દિવસ (0–7, જ્યાં 0 અને 7 બંને રવિવાર સૂચવે છે). ચાલવાનું ચોક્કસ અઠવાડિયાના દિવસો સુધી મર્યાદિત કરે છે.
1-5સોમવારથી શુક્રવાર છે,0,6સપ્તાહાંત છે,MON-FRIમોટાભાગના પાર્સરમાં કામ કરે છે. જ્યારે મહિનાનો દિવસ અને અઠવાડિયાનો દિવસ બંને ચોક્કસ મૂલ્યો પર સેટ હોય, ત્યારે ક્લાસિક cron કોઈપણ એક મેળ પર ચાલે છે (લૉજિકલ OR), જે દર વખતે લોકોને ચોંકાવે છે.
Cron એક્સપ્રેશન પાર્સર શા માટે વાપરવું?
- ડિપ્લોય પહેલાં ચૂપચાપ થયેલી ગેરસમજ પકડો. expression `0 2 */3 * *` દર ત્રીજા દિવસે રાત્રે 2 વાગ્યે ચાલે છે, દર ત્રણ મિનિટે નહીં — તેને અહીં પેસ્ટ કરો અને તે પ્રોડક્શનમાં મોકલાય તે પહેલાં તમે તેને સાદા અંગ્રેજીમાં જોશો.
- મોટાભાગના ક્લાઉડ શેડ્યૂલર ડિફોલ્ટ રૂપે UTC માં ચાલે છે. તમારા સ્થાનિક ઝોનમાં આગામી દસ ચાલવાના સમય જોવાથી DST ને કારણે થતી એક-કલાક-ઓછી/વધુ વાળી ગડબડ કોઈને રાત્રે 3 વાગ્યે જગાડે તે પહેલાં સામે આવી જાય છે.
- `@daily`, `@weekly`, અને `@monthly` જેવા શૉર્ટકટ સગવડભર્યા પણ અસ્પષ્ટ છે. પાર્સર તમને અંતર્ગત પાંચ-ક્ષેત્ર સ્વરૂપ બતાવે છે જેથી તમે બરાબર જાણો કે શું શેડ્યૂલ થયું.
- ક્ષેત્ર-દર-ક્ષેત્ર બિલ્ડર તમને એક સમયે એક કૉલમ શેડ્યૂલ રચવા દે છે અને માનવ-વાચ્ય વર્ણન જીવંત અપડેટ થતું જોવા દે છે, જે cron man page ને દસમી વાર ફરી વાંચવા કરતાં ઘણું ઝડપી છે.
Cron એક્સપ્રેશન ક્યાં વપરાય છે?
cron સિન્ટૅક્સ ગમે ત્યાં દેખાય છે જ્યાં કોઈ જૉબને ઘડિયાળ પ્રમાણે પુનરાવર્તિત થવાની જરૂર હોય. ત્રણ સૌથી સામાન્ય સપાટીઓ, દરેક પોતાની જે ચોક્કસ ગૂંચ માટે જાણીતી છે તેની સાથે:
- બૅકઅપ શેડ્યૂલ. ક્લાસિક `crontab -e` એન્ટ્રી જે રાત્રે 2 વાગ્યે ડેટાબેઝને S3 પર ડમ્પ કરે છે, અથવા દર મહિનાની પહેલીએ `pg_dump` આર્કાઇવ ફેરવે છે. `0 2 * * * /usr/local/bin/backup.sh` જેવી પંક્તિ ઇતિહાસમાં cron ની કોઈપણ અન્ય પંક્તિ કરતાં વધુ Linux સર્વર પર મોકલાઈ છે. મિનિટ અને કલાક સાચા રાખો, stderr ને ક્યાંક ટકાઉ જગ્યાએ રીડાયરેક્ટ કરો, અને તમે એક મૅન્યુઅલ ચૅકલિસ્ટને fire-and-forget સ્ક્રિપ્ટથી બદલી નાખી છે.
- GitHub Actions `schedule` ટ્રિગર. `.github/workflows/*.yml` માં `on.schedule.cron` કી પ્રમાણભૂત પાંચ-ક્ષેત્ર cron સ્વીકારે છે, પણ જૉબ હંમેશા UTC માં ચાલે છે અને જો રનર કતાર વ્યસ્ત હોય તો GitHub ચૂપચાપ એક ચાલવાનો સમય છોડી દેશે. સામાન્ય ભાત: સોમવારથી શુક્રવાર સવારે 9 AM UTC પર સારાંશ મોકલવા માટે `cron: '0 9 * * 1-5'`. પહેલાં તેને અહીં તમારા સ્થાનિક ઝોનમાં પ્રીવ્યૂ કરો જેથી તમે 9 AM London સારાંશનું વચન ન આપો જે ખરેખર BST માં 10 AM પર પહોંચે છે.
- AWS EventBridge Scheduler. EventBridge cron expressions વર્ષ માટે છઠ્ઠું ક્ષેત્ર લે છે અને મહિનાનો દિવસ અથવા અઠવાડિયાનો દિવસ ક્ષેત્રમાં `*` ને બદલે `?` ની જરૂર પડે છે — `cron(0 9 ? * MON-FRI *)` એ ક્લાસિક અઠવાડિયા-દિવસ 9 AM પ્રમાણભૂત cron નું EventBridge રૂપાંતર છે. શેડ્યૂલ થયેલ Lambda ઇન્વોકેશન, ECS ટાસ્ક રન, અને Step Function સ્ટેટ-મશીન શરૂઆતો માટે વપરાય છે; ક્લાસિક cron સિન્ટૅક્સ સાથેનો અમેળ CloudFormation ડિપ્લોયમાં `ValidationException` ભૂલોનો નંબર-એક સ્રોત છે.
વાસ્તવિક cron એક્સપ્રેશન કેવું દેખાય છે?
0 9 * * 1-5 લો — દર અઠવાડિયાના દિવસે સવારે 9:00 વાગ્યે ચાલે છે. ક્ષેત્રો ડાબેથી જમણે વાંચીએ: 0 કલાકનો શૂન્યમો મિનિટ છે, 9 24-કલાકની ઘડિયાળ પર સવારે 9 વાગ્યે છે, મહિનાના દિવસ પર * નો અર્થ દરેક કૅલેન્ડર દિવસ, મહિના પર * નો અર્થ દર મહિને, અને અઠવાડિયાના દિવસ પર 1-5 ચાલવાનું સોમવારથી શુક્રવાર સુધી મર્યાદિત કરે છે (જ્યાં પ્રમાણભૂત cron ક્રમાંકનમાં 1 = સોમવાર). તેને ઉપરના ઇનપુટમાં પેસ્ટ કરો અને પાર્સર At 09:00 AM, Monday through Friday ની પુષ્ટિ કરે છે, અને આગામી દસ ચાલવાની તારીખો તમે પસંદ કરો તે IANA ઝોનમાં રજૂ થાય છે. AWS EventBridge સિન્ટૅક્સમાં એ જ ઉદ્દેશ cron(0 9 ? * MON-FRI *) છે — અંતે વર્ષ ક્ષેત્ર અને જ્યાં પ્રમાણભૂત cron * વાપરે ત્યાં ? ની નોંધ લો. Quartz expression તરીકે એ જ ઉદ્દેશ (અગ્રણી સેકન્ડ સાથે છ-ક્ષેત્ર) 0 0 9 ? * MON-FRI છે. ત્રણ અલગ-અલગ પ્લેટફોર્મ, ત્રણ અલગ-અલગ સપાટી સ્વરૂપ, એક જ અંતર્ગત શેડ્યૂલ.
cron expressions બરાબર એક રીતે અક્ષમ્ય છે: એક ટાઇપો તમને એક સિન્ટૅક્ટિક રીતે માન્ય શેડ્યૂલ આપે છે જે ખોટા સમયે ચાલે છે, અને કોડ રિવ્યૂમાં પકડવા માટે કોઈ ભૂલ હોતી નથી. `0 0 1 * *` વાંચીને એ જાણવું કે તે દર મહિનાની પહેલીએ મધરાત્રે ચાલે છે, ન કે 1 જાન્યુઆરીએ, એ અભ્યાસ માગે છે. ઉપરનો પાર્સર એ અભ્યાસને દસ-સેકન્ડની વિવેકબુદ્ધિ-તપાસમાં ફેરવી નાખે છે — expression પેસ્ટ કરો, અંગ્રેજી વાંચો, તમારા સ્થાનિક ઝોનમાં આગામી દસ ચાલવાના સમય ધ્યાનથી જુઓ, અને YAML મોકલો એ જાણીને કે cron પંક્તિ ખરેખર એ જ કરે છે જે commit સંદેશ કહે છે.
5-ક્ષેત્ર અને 6-ક્ષેત્ર cron વચ્ચે શું તફાવત છે?
પાંચ-ક્ષેત્ર cron એ એક-મિનિટ રિઝોલ્યુશન વાળું ક્લાસિક Unix વ્યાકરણ છે. છ-ક્ષેત્ર cron સબ-મિનિટ શેડ્યૂલિંગ માટે એક અગ્રણી સેકન્ડ કૉલમ ઉમેરે છે — Quartz અને Spring ના @Scheduled દ્વારા વપરાય છે. AWS EventBridge પણ છ ક્ષેત્રો વાપરે છે, પણ તેનો વધારાનો કૉલમ સેકન્ડ નહીં, અંતે આવતું વર્ષ છે.
@hourly, @daily અને @weekly નો શું અર્થ થાય છે?
Vixie-cron ઉપનામો 1987 માં રજૂ થયાં. @hourly = 0 * * * *, @daily = 0 0 * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * *, @yearly = 0 0 1 1 *. @reboot બૂટ વખતે એક વાર ચાલે છે. GitHub Actions અને EventBridge આ ઉપનામોને નકારે છે.
Cron માં રવિવાર દિવસ 0 છે કે દિવસ 7?
ક્લાસિક Vixie cron માં બંને — 0 અને 7 બંને સ્વીકારાય છે જેથી 5-7 જેવી શ્રેણીઓ સ્વાભાવિક રીતે શુક્રવાર-થી-રવિવાર વંચાય. સોમવાર હંમેશા 1 છે, શનિવાર હંમેશા 6 છે. Quartz અને AWS EventBridge એક અલગ પ્રથા વાપરે છે: 1-7 સાથે રવિવાર 1 તરીકે. ધારણા કરતાં પહેલાં પ્લેટફોર્મ દસ્તાવેજો તપાસો.
Cron ડેલાઇટ સેવિંગ ટાઇમ ને કેવી રીતે સંભાળે છે?
એન્જિનના ટાઇમઝોન પર આધાર રાખે છે. UTC માં (EventBridge, Kubernetes, અને GitHub Actions પર ડિફોલ્ટ) DST અસ્તિત્વમાં નથી. સ્થાનિક DST ઝોનમાં, ક્લાસિક Vixie cron સ્પ્રિંગ-ફોરવર્ડ ગૅપ દરમિયાન જૉબ છોડી દે છે અને ફૉલ-બૅક દરમિયાન બે વાર ચલાવે છે; systemd ટાઇમર બરાબર એક જ વાર ચાલે છે.