Beoordeel dit artikel :
3/5 | 1 mening
Dit artikel was nuttig voor jou ?
Ja
Geen
Vous avez noté 0 étoile(s)
Sommaire
Procédure
Het doel van een cron job is het automatisch uitvoeren van een script, een commando of een programma op vaste tijden.
Met"LWS cron job" kun je een script op je site zo plannen dat het op verschillende tijden wordt uitgevoerd. Bijvoorbeeld eenmaal per week, eenmaal per dag, op de 8e van elke maand, enz.
Cron is een heel handig hulpmiddel voor systeembeheerders om verschillende taken te automatiseren, zoals het maken van back-ups van gegevens, het bijwerken van software,het verzenden van e-mails, enz.
Er wordt een time-out van 240s toegepast op deze taken, wat betekent dat als je script er meer dan 4 minuten over doet om uit te voeren, het na 4 minuten automatisch wordt afgesloten.
Eerst moet je inloggen op je LWS account en toegang krijgen tot de shared hosting waarvoor je een cron job wilt aanmaken.
Eenmaal in het beheer van je dienst, zoek je naar het blok"Database & PHP" en klik je op"Cron taken".

Het eerste dat je moet configureren voor je cron job is de periodiciteit.
Op dit niveau biedt LWS voorinstellingen in zijn tool zodat je dit met 1 klik kunt configureren.
Gebruik hiervoor de eerste lijst bovenaan het formulier en selecteer een van de voorgestelde parameters. Hierdoor worden de velden automatisch ingevuld zodat ze overeenkomen met de periodiciteit die is aangegeven in de lijst die je hebt geselecteerd.

Als de periodiciteit die je wilt instellen niet wordt voorgesteld in deze eerste lijst, maak je dan geen zorgen, we kunnen elk element configureren.
Voor elk element (minuten, uren, dagen, enz.) kun je de waarden handmatig invoeren of het lijstveld rechts van elk veld gebruiken.
Dus als ik bijvoorbeeld wil dat mijn taak elke dag om 12:27 begint, hoef ik alleen maar het getal 27 te selecteren in de lijst bij het minutenveld en 12:00 pm (middag) te selecteren in de lijst bij het urenveld.
Er zijn drie manieren om uw script aan te roepen via de Cron Task tool:
Het verschil tussen deze drie opties zit voornamelijk in de manier waarop ze je script uitvoeren.
Een Wget of Curl aanroep gebruikt het HTTP protocol, wat betekent dat het onderworpen is aan Apache configuraties en beperkingen zoals de timeout, die relatief kort kan zijn.
DePHP-aanroep daarentegen is vrij van de beperkingen die we bij de andere twee methoden hebben besproken. Zie de PHP-aanroep als een SSH-verbinding.
Je kunt je dus afvragen welke methode je moet kiezen om je Cron-taak in te stellen. Ons antwoord is dat er geen echte verschillen zijn voor basisscripts die snel worden uitgevoerd. Als je CRON taak echter vrij groot is, met veel uitgevoerde acties en dus een iets langere uitvoeringstijd, dan zal de meest geschikte methode eenPHP aanroep zijn. In tegenstelling tot Curl of Wget zal de time-out langer zijn (4 min).
We gaan kijken hoe we een cron job kunnen instellen voor elk van de hierboven genoemde aanroepen. We nemen als voorbeeld een eenvoudige site die een root script aanroept.
cURL aanroep
Bij het maken van een curl-oproep met behulp van het HTTP-protocol, roepen we gewoon de URL naar ons bestand als volgt aan
curl -s -H "Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php" > /dev/null
Mogelijk moeten we ook parameters naar ons script sturen. Om dit te doen, voeg je ze gewoon als volgt toe:
curl -d "param1=waarde1¶m2=waarde2" -s -H "Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php" > /dev/null
Hierdoor kunnen we deze parameterwaarden ophalen in de code van ons POST-script.
| Optie | Rol |
|---|---|
-s |
Stille modus (geen voortgangsbalk). |
-H "Cache-Control: no-cache". |
Forceer server-side no-cache. |
> /dev/null |
Leidt uitvoer om om niets op te slaan. |
Wget-aanroep
Tijdens een Wget aanroep, die ook het HTTP protocol gebruikt, zoals bij de cURL aanroep, zullen we ook de URL van ons script aanroepen. Dit geeft :
wget --no-cache --output-document=/dev/null --header="Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php"
Als we parameters moeten doorgeven aan het script, hebben we met Wget geen andere keuze dan de parameters in GET door te geven. Zo schrijf je het commando :
wget --no-cache --output-document=/dev/null --header="Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php?param1=value1¶m2=value2"
In het script kunnen we deze twee parameters ophalen in GET.
| Optie | Rol |
|---|---|
--geen-cache |
Vermijdt het gebruik van tussenliggende caches (handig met bepaalde proxy's). |
--output-document=/dev/null |
Slaat niets lokaal op. |
--header="Cache-Control: no-cache". |
Stuurt een HTTP-header om caching aan de serverzijde te vermijden. |
PHP-aanroep
In het geval van een eenvoudige site, stellen we ons voor dat het bestand met mijn script cron.php heet.
Het enige wat je hoeft te doen is het volgende commando in te voeren in de Cron Task tool:
php /htdocs/cron.php
Hier zal de PHP-versie die wordt gebruikt om je script uit te voeren standaard 8.0 zijn.
Als je een specifieke versie van PHP wilt gebruiken, pas je gewoon de aanroep iets aan. Als u bijvoorbeeld versie 7.2 wilt gebruiken om het script uit te voeren, is dit het commando :
php72 /htdocs/cron.php
Het kan ook nodig zijn om een argument door te geven dat in ons script wordt gebruikt.
Laten we ons bijvoorbeeld voorstellen dat het doel van ons script is om een e-mail te versturen op basis van een criterium dat we definiëren, zoals de verjaardag. Daarom willen we misschien dit criterium doorgeven in de aanroep. Dit is hoe je dat doet via de opdrachtregel :
php72 /htdocs/cron.php type=verjaardag
Speciale gevallen
Er zijn ook speciale gevallen, afhankelijk van wat u voor uw site gebruikt.
Bijvoorbeeld, in het geval van een site die is gemaakt met het Cakephp framework, zal de configuratie van de CRON taak een beetje anders zijn omdat het zal worden gedaan via een SHELL commando aangeroepen door het framework systeem.
Stel dat we een e-commerce site hebben die is gemaakt met het Cakephp framework en we willen een script instellen dat een e-mail stuurt naar de beste klant met een promotiecode.
We gaan een Cake-commando maken dat we SendCP noemen en dat het script zal bevatten dat beheert wat we willen doen. Hier is hoe we de Cron-taak configureren:
php72 /htdocs/Console/cake.php SendCP
Het zou lang duren om van elk geval een voorbeeld te geven, maar met wat hier is gegeven, heb je al een goede basis voor het gebruik van de Cron task tool.
Met behulp van de verschillende voorbeelden weten we nu hoe we ons commando moeten schrijven om :
We gaan nu kijken hoe we een logbestand kunnen maken zodat we kunnen zien wat er is gebeurd tijdens het script dat is aangeroepen door Cron.
Hiervoor gebruiken we het onderstaande voorbeeld voor ons CRON script.
Voorbeeld van een PHP echofunctie voor het logbestand
<?php /* Dus je hoeft je geen zorgen te maken over caching */ header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); /* Schrijf de huidige datum naar het bestand, bijvoorbeeld: 2023/01/19 12:24:01 */ /* Met PHP_EOL kun je een regel in het bestand overslaan */ echo date('J/m/d h:i:s').PHP_EOL; /* Schrijf de onderstaande zin in het logbestand */ echo 'Opname van mijn Cron'.PHP_EOL.PHP_EOL; ?>
Weergave van het logbestand na het starten van het script via Cron Job
2023/01/19 02:57:01 Opname van mijn Cron 2023/01/19 03:57:01 Opname van mijn Cron 2023/01/19 04:57:01 Opname van mijn Cron 2023/01/19 05:57:01 Opname van mijn Cron 2023/01/19 06:57:01 Opname van mijn Cron 2023/01/19 07:57:01 Opname van mijn Cron 2023/01/19 08:57:01 Opname van mijn Cron
Wat je in je logbestand zet, hangt dus af van jezelf en van wat je in je script wilt bijhouden. Het zou bijvoorbeeld een lijst van acties kunnen zijn met het resultaat van elke actie.
Voorbeeld van een cURL aanroep met terugkeer in een logbestand
Voor een cURL aanroep is hier het commando om in te voeren in het "Command" veld:
curl -s -H "Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php" > /htdocs/logs/cron_curl.log 2>&1
In dit voorbeeld worden er writebacks (echo PHP) gemaakt naar het cron_curl.log bestand in de logs map. Als het bestand of de map niet bestaat, wordt deze automatisch aangemaakt.
| Optie | Rol |
|---|---|
-s |
Stille modus (geen voortgangsbalk). |
-H "Cache-Control: no-cache". |
Forceer server-side no-cache. |
> /htdocs/logs/cron_curl.log |
Leidt standaard uitvoer (stdout) om naar cron_curl.log. |
| 2>&1 | leidt ook fouten (stderr) om naar hetzelfde bestand. |
Voorbeeld wget-aanroep met terugkeer naar een logbestand
Voor een Wget-aanroep gebruik je het volgende commando:
wget -O - -q --no-cache --header="Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php" > /htdocs/logs/cron_wget.log 2>&1
In dit voorbeeld wordt schrijffeedback (echo PHP) naar het cron_wget.log bestand in de logs map gestuurd. Als het bestand of de map niet bestaat, wordt het automatisch aangemaakt.
| Optie | Rol |
|---|---|
--Geen cache |
Vermijdt het gebruik van tussenliggende caches (nuttig met sommige proxies). |
--header="Cache-Control: no-cache" |
Stuurt een HTTP-header om server-side caching te vermijden. |
| --post-data="..." | voegt een aangepaste HTTP-header toe. |
> /htdocs/logs/cron_wget.log |
leidt standaard uitvoer (stdout) om naar cron_wget.log. |
| 2>&1 | leidt ook fouten (stderr) om naar hetzelfde bestand. |
Voorbeeld van een PHP aanroep met terugkeer naar een logbestand
Voor een PHO oproep is hier het commando dat gebruikt moet worden:
php72 /htdocs/cron.php >> /htdocs/logs/cron_php.log
In dit voorbeeld wordt schrijffeedback (echo PHP) naar het bestand cron_php.log in de map logs gestuurd. Als het bestand of de map niet bestaat, wordt het automatisch aangemaakt.
Zodra je je cron-taken hebt aangemaakt, kun je ze direct terugvinden in de lijst die onder het toevoegformulier verschijnt.

Hier vind je een lijst met de opgenomen opdracht, de periodiciteit en de optie om een crontaak te verwijderen of te pauzeren.

Als je een LWS Starter-pakket of hoger hebt, kun je de cron job voor je pakket wijzigen via de Web Terminal die toegankelijk is vanuit je pakketbeheer.
Om dit te doen, maakt u verbinding met uw hosting en gaat u naar de shared hosting waarvoor u een cron job wilt wijzigen.
Klik op"Terminal" in de sectie "Software".

Open het cron-bestand met het volgende commando:
crontab -e

Eenmaal in het cron-bestand, blader je door het bestand voor de taak die je wilt wijzigen. Elke regel in het bestand vertegenwoordigt een aparte taak. Wijzig vervolgens de crontaak en zorg ervoor dat de syntaxis correct blijft. Sla de taak vervolgens op met de sneltoets [CTRL] +X en vervolgens"Y". Druk vervolgens op [Enter].
Je kunt vervolgens controleren of de crontaak correct is aangepast met het volgende commando:
crontab -l

U hebt uw domein aan CloudFlare gekoppeld met behulp van de DNS van laatstgenoemde en u wilt een crontaak configureren vanuit uw klantengedeelte in de bijbehorende sectie, maar de taak wordt slechts één keer uitgevoerd zonder zichzelf te herhalen op het door u gewenste tijdsinterval. Dit probleem is bekend, CloudFlare blokkeert de uitvoering van crons die vanuit onze services worden verzonden. Om dit probleem op te lossen, is hier een workaround.
De cron-taken die zijn geconfigureerd vanuit het klantengedeelte werken niet als u CloudFlare DNS gebruikt. Volg deze procedure om dit probleem op te lossen:
Voeg in de sectie "DNS" een CNAME-record toe zoals in het volgende voorbeeld:

Vervang"cron" door de naam van uw subdomein en"domain.ext" door uw domeinnaam.
Zorg ervoor dat de wolk grijs is en niet oranje. Dit vertelt CloudFlare dat u haar diensten niet wilt gebruiken voor dit subdomein.
U kunt vervolgens op de knop"Record toevoegen" klikken.
U weet nu hoe u : - Het doel en de werking van een crontaak begrijpt 🤖
We hopen dat dit artikel u alle sleutels heeft gegeven om cron-taken te beheersen en uw systeemtaken efficiënt te automatiseren.
Als je vragen, feedback of tips hebt om te delen, aarzel dan niet om ze als commentaar achter te laten. Bedankt voor het lezen en tot snel voor meer praktisch advies! 🙏💬
Beoordeel dit artikel :
3/5 | 1 mening
Dit artikel was nuttig voor jou ?
Ja
Geen
0mn lezen
Multidomein - Meerdere domeinen op dezelfde webhostingservice plaatsen
1mn lezen
Is het mogelijk om de RSpamD anti-spam functie te verwijderen op shared hosting?
0mn lezen
Hoe kan ik e-mails bekijken die zijn verzonden met de PHP mailfunctie en die zijn geblokkeerd door SPAMASSIN?