Utilisation de crontab pour exécuter le script toutes les minutes et une autre toutes les 24 heures [fermé]

316

J'ai besoin d'une syntaxe crontab qui devrait exécuter un script PHP spécifique /var/www/html/a.phptoutes les minutes. L'exécution à chaque minute doit commencer à 00h00. L'autre tâche qui doit exécuter un script à 00h00 /var/www/html/reset.php(une fois toutes les 24 heures).

Michael
la source

Réponses:

586

chaque minute:

* * * * * /path/to/php /var/www/html/a.php

toutes les 24 heures (tous les minuit):

0 0 * * * /path/to/php /var/www/html/reset.php

Consultez cette référence pour savoir comment fonctionne crontab: http://adminschoice.com/crontab-quick-reference , et cet outil pratique pour créer cron jobx: http://www.htmlbasix.com/crontab.shtml

Jan Hančič
la source
3
Cher Jan! Très bonne réponse. Que diriez-vous d'exécuter un cron toutes les 30 secondes? C'est comme ça? * * * * * / 30 / chemin / vers / php /var/www/html/a.php?
flaab
26
Malheureusement, vous ne pouvez pas exécuter les tâches cron plus fréquemment que chaque minute. Vous devrez utiliser autre chose pour cela.
Jan Hančič
9
Jan Hančič, vous pouvez le faire. Vous avez juste besoin d'utiliser une astuce simple décrite ici: stackoverflow.com/a/1034304/1580615
Ruben
Est-il normal d'exécuter le script .php chaque minute avec cron? Peut-il réduire la productivité du serveur? Y a-t-il d'autres mauvais effets secondaires?
Andrew
@flaab toutes les 30 secondes, vous pouvez essayer quelque chose comme ceci: - * * * * * curl - URL silencieuse> / dev / null 2> & 1 * * * * * sleep 30; curl - URL silencieuse> / dev / null 2> & 1
Shashank Shah
375

Voici le format de / etc / crontab:

# .---------------- 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

Je recommande de copier et coller cela en haut de votre fichier crontab afin que vous ayez toujours la référence à portée de main. Les systèmes RedHat sont configurés de cette façon par défaut.

Pour exécuter quelque chose toutes les minutes:

* * * * * username /var/www/html/a.php

Pour exécuter quelque chose à minuit tous les jours:

0 0 * * * username /var/www/html/reset.php

Vous pouvez soit inclure / usr / bin / php dans la commande à exécuter, soit rendre les scripts php directement exécutables:

chmod +x file.php

Démarrez votre fichier php avec un shebang afin que votre shell sache quel interprète utiliser:

#!/usr/bin/php
<?php
// your code here
Greg
la source
42
C'est le format de /etc/crontab, qui est un fichier crontab système . Un utilisateur crontab a un format différent, qui n'inclut pas le champ de nom d'utilisateur, car il s'exécute en tant qu'utilisateur qui l'a soumis. Si vous souhaitez exécuter une tâche cron en tant qu'utilisateur non root, vous devez utiliser la crontabcommande pour la soumettre (et ne pas vous soucier de l'emplacement de stockage de la crontab). Ne jouez pas avec, /etc/crontabsauf si vous en avez vraiment besoin.
Keith Thompson
umm ... non, ne fonctionne toujours pas
Madeo