Vraag Taakplanning met crontab, wat gebeurt er als de computer in die tijd wordt afgesloten?


Ik plan sommige taken met behulp van crontab.

Wat gebeurt er als mijn computer wordt afgesloten of uitgeschakeld gedurende de tijd dat cron iets zou doen?

Loopt elke gemiste cron-taak nadat de computer is ingeschakeld of worden gemiste taken voor die dag genegeerd? Als gemiste taken niet worden hervat, is er dan een manier om cron zodanig te configureren dat de gemiste taken worden uitgevoerd nadat de computer weer is ingeschakeld?


73
2017-08-10 16:22


oorsprong


Ik heb geprobeerd een anacron-zelfstudie op het web te zoeken maar kon geen goede vinden. Kijken naar man-pagina's heeft me ook niet veel geholpen. Hoe kan ik de reeds bestaande crontab veranderen, zodat deze wordt gewijzigd in anacron? Of een tutorial hierin zal zeer nuttig zijn - seg.server.fault
Ik heb mijn antwoord bewerkt om enkele voorbeelden op te nemen. Ik hoop dat dat helpt! - jeff


antwoorden:


Wanneer uw computer is uitgeschakeld (of de cron-daemon anders niet werkt), worden cron-taken niet gestart.

Als u taken hebt die u achteraf wilt uitvoeren in tijden dat de computer is afgesloten, gebruikt u anacron. Standaard geïnstalleerd, zie "man anacron", "man anacrontab" of het bestand / etc / anacrontab voor meer informatie.

Ubuntu gebruikt standaard anacron voor crontab-items in:

/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

het achterlaten van de resterende crontabs die moeten worden afgehandeld door de hoofdcron daemon, in het bijzonder:

/etc/crontab
/etc/cron.d
/var/spool/cron

OPMERKINGEN

Anacron zelf werkt niet als een daemon, maar vertrouwt op opstartscripts van het systeem en cron zelf om uit te voeren.

Op de Ubuntu 8.04-box die ik bekijk, wordt /etc/init.d/anacron bij het opstarten uitgevoerd, en elke ochtend om 07:30 weer cron elke ochtend.

De README op /usr/share/doc/anacron/README.gz heeft iets meer informatie dan op de manpages staat.

Voorbeelden

Voor eenvoudige "dagelijkse", "wekelijkse", "maandelijkse" taken plaatst u een kopie of een symlink naar het script in een van de mappen /etc/cron.{daily|weekly|monthly} hierboven. Anacron zorgt ervoor dat het dagelijks / wekelijks / maandelijks wordt uitgevoerd en als uw computer is uitgeschakeld op de dag dat de 'wekelijkse' scripts normaal gesproken zouden worden uitgevoerd, worden ze de volgende keer dat de computer is ingeschakeld uitgevoerd.

Als een ander voorbeeld, aannemende dat je hier een script hebt: /usr/local/sbin/maint.sh

En je wilt het om de drie dagen draaien, de standaard invoer in / etc / crontab ziet er als volgt uit:

# m h dom mon dow user  command
0 0 */3 * * root /usr/local/sbin/maint.sh

Als uw computer niet was ingeschakeld om 00:00 op de derde van de maand, zou de taak pas op de 6e worden uitgevoerd.

Om de taak in plaats daarvan op de 4e te laten lopen wanneer de computer uit staat en de run op de 3e mist, zou je dit in / etc / anacrontab gebruiken (vergeet niet om de regel uit / etc / crontab te verwijderen):

# period delay job-identifier command
3 5 maint-job /usr/local/sbin/maint.sh

De "vertraging" van "5" hierboven betekent dat anacron 5 minuten zal wachten voordat deze deze taak uitvoert. Het is de bedoeling om te voorkomen dat anacron onmiddellijk tijdens het opstarten dingen afvuurt.


61
2017-08-10 16:26



Ubuntu gebruikt standaard anacron. - 3dinfluence
bedankt, 3dincluence - aangepast antwoord om aan te geven welke crontabs worden afgehandeld door anacron in een standaard ubuntu setip. - jeff
als je het script in /etc/cron.*/ zet in plaats van een eigen crontab-item te hebben, heb je geen "." in de bestandsnaam van het script. debian en ubuntu gebruiken run-parts om dergelijke scripts uit te voeren, en standaard zullen run-parts bestanden met een negeren. in de bestandsnaam - dit is het geval om de .dpkg-oude en .dpkg-dist-versies van scripts die zijn hernoemd van upgrades niet uit te voeren. dus noem het script of de symlink "maint" in plaats van "maint.sh". - cas
OpenSUSE gebruikt standaard cronie vanaf 11.2 (momenteel naar Tumbleweed / Leap 42.2). Gebruiken anacron, installeer de cronie-anacron pakket. - palswim


Dit is afhankelijk van welke cron-planner u gebruikt. De basis, vanilla cron daemon zal geen taken uitvoeren die werden gemist vanwege de downtime van het systeem. Er zijn echter andere cron-planners die speciaal voor deze situatie zijn ontworpen en die dit voor u doen. De twee meest voorkomende voorbeelden zijn anacron en fcron.


12
2017-08-10 16:27





Taken die zijn gepland terwijl de computer is uitgeschakeld, worden niet uitgevoerd als de computer weer wordt ingeschakeld


5
2017-08-10 16:26





Als u afsluit terwijl de cron-taken worden uitgevoerd, wordt het systeem afgesloten en stoppen de cron-taken (of worden niet uitgevoerd).

Een alternatief waarop u kunt inchecken, is Anacron.


2
2017-08-10 16:27





Hangt echt af van de cron deamon die je gebruikt. Vixie-cron slaat cronjobs die zijn gemist gewoon over. fcron zal gemiste crons uitvoeren zodra dit kan. IIRC het is ook gebaseerd op Vixie-Cron, dus als dat is wat je zoekt, wil je misschien eerst even kijken.


2
2017-08-10 16:35