Ik gebruik een PHP-script in een cronjob en ik wil elke 5 minuten e-mails verzenden
Mijn huidige (crontab) cronjob:
10 * * * * /usr/bin/php /mydomain.in/cromail.php > /dev/null 2>&1
De cronmail.php is als volgt:
<?php
$from = 'D'; // sender
$subject = 'S';
$message = 'M';
$message = wordwrap($message, 70);
mail("[email protected]", $subject, $message, "From: $from\n");
?>
Maar ik heb al 30 minuten geen e-mail ontvangen met deze configuratie.
Antwoord 1, autoriteit 100%
In een crontab
-bestand zijn de velden:
- minuut van het uur.
- uur van de dag.
- dag van de maand.
- maand van het jaar.
- dag van de week.
Dus:
10 * * * * blah
betekent dat u blah
om 10 minuten over elk uur uitvoert.
Als je elke vijf minuten wilt, gebruik dan:
*/5 * * * * blah
wat betekent dat elke minuut, maar slechts elke vijfde, of:
0,5,10,15,20,25,30,35,40,45,50,55 * * * * blah
voor oudere cron
uitvoerbare bestanden die de notatie */x
niet begrijpen.
Als het nogdaarna niet lijkt te werken, verander dan het commando in iets als:
date >>/tmp/debug_cron_pax.txt
Monitor dat bestand om ervoor te zorgen dat er iets wordt geschreven om de vijf minuten. Als dat zo is, is er iets mis met uw PHP-scripts. Zo niet, dan is er iets mis met uw cron
DAEMON.
Antwoord 2, Autoriteit 18%
Uw CRON moet er als volgt uitzien:
*/5 * * * *
Cronwtf is echt nuttig wanneer u uw cron-instellingen wilt testen.
is misschien een goed idee om de uitvoer in een logbestand te pijpen, zodat u kunt zien of uw script ook fouten gooit – omdat u ze niet in uw terminal ziet.
Probeer ook een Shebang bovenaan uw PHP-bestand te gebruiken, zodat het systeem weet waar u PHP kunt vinden. Zoals:
#!/usr/bin/php
Op die manier kunt u het hele ding zo noemen
*/5 * * * * php /path/to/script.php > /path/to/logfile.log
Antwoord 3, Autoriteit 3%
U instelt uw CRON om in elk uur op 10e minuut te lopen.
Om het in te stellen op every 5 mins
Wijzigen in */5 * * * * /usr/bin/php /mydomain.in/cronmail.php > /dev/null 2>&1
Antwoord 4, Autoriteit 3%
Als u een CRON elke n
minuten wilt uitvoeren, zijn er een paar mogelijke opties, afhankelijk van de waarde van n
.
n
Verdeel 60 (1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30)
Hier is de oplossing eenvoudig door gebruik te maken van de /
notatie:
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
m-59/n * * * * command
In het bovenstaande staat n
voor de waarde n
en m
voor een waarde kleiner dan n
of *
. Dit zal het commando uitvoeren op de minuten m,m+n,m+2n,...
n
deelt GEEN 60
Als n
60 niet deelt, kun je dit niet netjes doen met cron, maar het is mogelijk. Om dit te doen, moet je een test in de cron plaatsen waar de test de tijd controleert. Dit kunt u het beste doen als u naar de UNIX-tijdstempel kijkt, het totale aantal seconden sinds 1970-01-01 00:00:00 UTC
. Laten we zeggen dat we het commando de eerste keer willen uitvoeren wanneer Marty McFly in Riverdale aankwam en het vervolgens elke n
minuten later herhalen.
% date -d '2015-10-21 07:28:00' +%s
1445412480
Als een cronjob elke 42
de minuut na `2015-10-21 07:28:00′ moet worden uitgevoerd, ziet de crontab er als volgt uit:
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
* * * * * minutetestcmd "2015-10-21 07:28:00" 42 && command
met minutetestcmd
gedefinieerd als
#!/usr/bin/env bash
starttime=$(date -d "$1" "+%s")
# return UTC time
now=$(date "+%s")
# get the amount of minutes (using integer division to avoid lag)
minutes=$(( (now - starttime) / 60 ))
# set the modulo
modulo=$2
# do the test
(( now >= starttime )) && (( minutes % modulo == 0 ))
Opmerking:UNIX-tijd wordt niet beïnvloed door schrikkelseconden
Opmerking:cron
heeft geen nauwkeurigheid van minder dan een seconde
Antwoord 5, autoriteit 2%
2 stappen om te controleren of een cronjob werkt:
- Log in op de server met de gebruiker die de cronjob uitvoert
-
Handmatig php-commando uitvoeren:
/usr/bin/php /mijndomein.in/cromail.php
En controleer of er een fout wordt weergegeven
Antwoord 6, autoriteit 2%
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
Om x minuten in te stellen, moeten we x minuten instellen in het eerste argument en vervolgens het pad van je script
Gedurende 15 minuten
*/15 * * * * /usr/bin/php /mydomain.in/cromail.php > /dev/null 2>&1