Jeg synes cron er en fantastisk kreasjon. Den er enkel i hva den gjør samtidig som den er ekstremt nyttig. Tillat meg å presentere en kort introduksjon til det for de ukjente, så vil jeg vise deg et nyttig triks du kanskje trenger en dag. Fortsett å lese denne bloggen for å lære om cron og crontab-kommandoen – og hvorfor du bør kjøre crontab på slutten av måneden.
Kort introduksjon til Cron & Crontab
Du kan angi hvilken som helst kommando til å kjøre når som helst (eller gjentatte ganger med et bestemt intervall) ved å bruke cron. Navnet kommer fra “chronos” – det greske ordet for tid. Hvis du har Linux, kommer du til å ha cron. Kjør kommandoen “crontab” for å redigere eller opprette jobbene for brukeren din.
Syntaksen virker litt kryptisk til å begynne med, men den er veldig grei. Du skriver inn en rekke tall og symboler etterfulgt av crontab-kommandoen du ønsker å kjøre. Tallene og symbolene angir ønsket tid og dag for å kjøre kommandoen. De er atskilt med et mellomrom som følger:
minutt time dag måned dag i uken
Så denne oppføringen:
5 13 * 3 * utfør_dette
vil kjøre crontab-kommandoen “execute_this” kl. 13:05 hver dag kun i mars. Endre det litt:
5 13 * 3-5 * utfør_dette
vil kjøre den samme crontab-kommandoen samtidig, men nå vil den kjøres hver dag i mars, april og mai.
Som sagt var dette en kort introduksjon til cron og crontab-kommandoen. Hvis du ikke vet hva du gjør her, vil du kanskje ikke teste på noen viktig maskin. Gå på research og lek (det er den beste måten å lære).
Sette inn en Crontab for den siste dagen i måneden
Så, hvordan lager du en crontab til å kjøre den siste dagen i måneden? For å komme i gang, slik ser det ut å kjøre den første i hver måned (kl. 13:05 igjen):
5 13 1 * * utfør_dette
At “1” der inne betyr når datoen er “1”, som er den første dagen i måneden. Problemet er at vi ikke har et nummer å sette der, som betyr den siste dagen i måneden. Det kan være 30, 31, 28, eller noen ganger til og med 29. Men én ting er alltid sant om den siste dagen i måneden, i morgen er den første!
La oss bruke denne informasjonen til å lage denne oppføringen:
59 23 28-31 * * utfør_dette
Jeg har kjørt denne ene løpeturen rett før dagen var over (23:59), men det kan være når som helst du trenger det. Og den vil kjøre på hver av våre mulige slutten av måneden (28-31), hver måned.
Selvfølgelig vil vi ikke at koden vår skal kjøres 28. oktober. Det er ikke den siste dagen i måneden. Datoen bør være 31 hvis det er oktober, men enda viktigere (og mer pålitelig) bør morgendagens dato være 1. Det er på tide å trekke frem våre shell scripting superkrefter.
[bash]dato +%d[/bash]
vil gi deg gjeldende dato som en streng med to tegn. Men siden vi vil se hva morgendagen er, ber vi om det i stedet
[bash]dato +%d -d i morgen[/bash]
Hvis det samsvarer med “01”, vet vi at morgendagen er den første, så i dag må være den siste.
[bash][ “$(date +%d -d tomorrow)” = “01” ] && utfør_dette[/bash]
Vår test (hakeparentesene) vil resultere i enten sant eller usant. Den vil kjøre den testen OG (&&) den neste kommandoen som er kommandoen vi satte ut til å kjøre i utgangspunktet. Men på grunn av måten datamaskiner fungerer på, hvis testen kommer falsk tilbake, vil den ikke bry å kjøre den andre kommandoen.
Så bare når den testen kommer tilbake som sann, vil den kjøre vår andre crontab-kommando. Dette er akkurat det vi ønsket, og vi har nettopp lurt datamaskinen til å gjøre vårt onde arbeid. Gratulerer!
Her er hva vi skriver inn i crontab for å få kommandoen vår til å kjøre helt på slutten av hver måned:
[code language=”bash”]59 23 28-31 * * [ “$(date +%d -d tomorrow)” = “01” ] && utfør_dette[/code]
Utforsk mulighetene til Magento med Magento Hosting Fra Hostinger.