Les sites Web peuvent exécuter des tâches planifiées avec Cron

horloge

Nous avons un certain nombre de systèmes de surveillance redondants au travail qui exécutent régulièrement des processus. Certains courent toutes les minutes, d'autres une fois par nuit selon ce qu'ils font. Par exemple, nous pouvons exécuter un script qui exporte tous les clients qui n'ont pas effectué d'achat dans les 30 jours pour leur envoyer un coupon.

Plutôt que d'essayer de garder une trace de tout cela à la main, il est beaucoup plus facile de créer des tâches qui sont automatiquement planifiées et exécutées. Sur les systèmes Unix, ceci est accompli avec Cron. Pour vous, les gens qui savez ce que vous faites, n'hésitez pas à m'éduquer, moi et les lecteurs, si je jette de la désinformation.

C'est malheureux, mais le développeur Web typique ne connaît pas du tout Cron. Même si elles le sont, les sociétés d'hébergement Web ne fournissent souvent pas d'accès ou de support à Cron. Mon hôte est l'un de ces derniers - ils vous permettent de l'utiliser, mais ils ne le prennent pas en charge.

Qu'est-ce que Cron?

Cron est nommé pour le mot grec Chronos, qui signifie class="notranslate". Cron s'exécute en boucle continue pour exécuter des tâches accumulées par Crontab (peut-être nommé pour languetteulator. Ces tâches sont généralement appelées Cronjobs et peuvent référencer des scripts sur votre site.

Explication du diagramme Cron

Comment configurer le Crontab

Faire fonctionner Cron peut être un défi, alors voici ce que j'ai appris et comment je l'ai fait Si sucer:

  1. J'ai configuré mon script pour vérifier Twitter API pour voir si quelqu'un avait répondu à @ifsuck. J'ai comparé ces messages aux messages que j'avais déjà enregistrés sur le site Web, en saisissant de nouveaux.
  2. Une fois que le script fonctionnait, j'ai activé les autorisations pour que l'utilisateur exécute le script (744) et ajouté la référence de script à mon fichier Cronjob - plus à ce sujet plus tard.
  3. J'ai ensuite dû me connecter à mon site Web via SSH. Sur un Mac, cela a pris l'ouverture du Terminal et la saisie Nom d'utilisateur SSH@domaine.com où nom d'utilisateur était le nom d'utilisateur que je souhaitais utiliser et le domaine était le site Web. J'ai ensuite été invité et donné le mot de passe.
  4. J'ai ensuite tenté d'exécuter le script directement à partir de l'invite de commande en tapant le nom de fichier et le chemin relatif sur le serveur: /var/www/html/monscript.php
  5. Une fois que je l'ai fait fonctionner correctement, j'ai ajouté le code Unix nécessaire dans la première ligne du fichier: #! / usr / bin / php -q . Je crois que cela indique simplement à Unix d'utiliser PHP pour exécuter le script.
  6. Sur la ligne de commande du terminal, j'ai tapé crontab (d'autres peuvent avoir besoin de taper crontab -e) et appuyez sur Entrée… et c'était tout ce qu'il fallait!

Syntaxe de votre fichier Cronjob

En ce qui concerne le n ° 2 ci-dessus, Cron utilise un schéma ingénieux pour déterminer quand vos scripts seront exécutés. En fait, vous pouvez réellement copier et coller ceci dans votre Cronfile (sur mon hôte, il est situé dans / var / spool / cron / avec le nom de fichier identique à mon nom d'utilisateur).

# + —————- minute (0 - 59)
# | + ————- heure (0 - 23)
# | | + ———- jour du mois (1 - 31)
# | | | + ——- mois (1 - 12)
# | | | | + —- jour de la semaine (0 - 6) (dimanche = 0 ou 7)
# | | | | |
* * * * * /var/www/html/monscript.php

Ce qui précède exécutera mon script toutes les minutes. Si je voulais qu'il ne fonctionne qu'une fois par heure, je mettrais simplement combien de minutes après l'heure je souhaite qu'il fonctionne, donc s'il était à 30 minutes:

30 * * * * /var/www/html/monscript.php

Assurez-vous également de définir les autorisations sur ce fichier en tant qu'exécutable! J'ai trouvé que la syntaxe, les autorisations et l'exécution de crontab à partir de la fenêtre du terminal étaient les facteurs les plus importants. Chaque fois que je réenregistre le fichier, je trouve que mes autorisations doivent également être réinitialisées!

MISE À JOUR: Si vous souhaitez vous assurer que les travaux sont en cours d'exécution, un moyen simple consiste à mettre à jour un champ de base de données avec la dernière exécution du script. Si c'est moins fréquent, vous pouvez simplement écrire un e-mail qui vous est envoyé.

Ressources Cron supplémentaires:

Combien de travaux pouvez-vous automatiser en utilisant Cron?

8 Commentaires

  1. 1

    Article bien couvert sur la configuration d'un cron, pour quelqu'un de nouveau dans les crojobs, la partie la plus difficile dans la configuration d'un cron est de déterminer l'intervalle d'exécution de cronjob, et il est assez courant d'obtenir un mauvais intervalle au premier essai. Si vos tâches cron sont sensibles au temps, il est bon d'inclure des codes dans le script pour afficher l'état de sortie afin que vous soyez tenu informé de l'état d'exécution de la tâche.

  2. 2

    Salut Doug,

    Quelques points à considérer lorsque vous travaillez avec des tâches cron.

    Tout d'abord, après quelques dizaines, vous souhaiterez avoir une interface utilisateur, une base de données et une syntaxe d'apparence anglaise 😉

    Deuxièmement, cron lancera le travail à l'heure spécifiée, que l'appel précédent du travail soit terminé ou non. Ainsi, exécuter une tâche une fois par minute qui prend 2 minutes entraînera rapidement l'exécution de nombreuses tâches identiques.

    Ensuite, il n'y a pratiquement aucun rapport d'erreur en cas de problème, vous devrez donc ajouter votre propre rapport d'erreur.

    J'ai abordé ces problèmes de plusieurs manières:
    - faire déclencher l'application via cron regarder dans une base de données pour déterminer ce qui doit être exécuté. Exécutez-le une fois par minute ou heure selon ce que vous voulez
    - demandez à chaque script de créer un fichier 'lock' dans / tmp et s'il existe, ne recommencez pas, cela évite les doublons si vous ne les voulez pas
    - si le script trouve le fichier de verrouillage datant de plus d'une heure (ou ce qui suggère votre mort), envoyez une alerte par e-mail
    - demandez au script d'envoyer un e-mail en cas d'échec du travail pour savoir que quelque chose s'est mal passé
    - regardez des frameworks comme Flux ou des planificateurs commerciaux lorsque vos besoins vont au-delà de quelques scripts

    chris

  3. 4

    J'ajouterai également que sur la plupart des systèmes Linux / Unix, «crontab -e» est ce que vous utilisez pour éditer votre crontab. Je pense que votre hôte (Jumpline) utilise une version modifiée pour des raisons de sécurité.

  4. 5

    Je me souviens encore du premier jour où j'ai rencontré Cronnie. J'avais entendu des choses sur elle, qu'elle était fiable, toujours à l'heure, mais parfois un peu déroutante sur ses intentions.

    J'ai trouvé que c'était vrai car elle était un mystère complet pour moi au début. Après avoir posé des questions sur elle, j'ai compris assez rapidement comment elle aimait fonctionner. Maintenant, je ne peux pas imaginer un jour se passer sans elle dans ma vie. Elle rend le banal passionnant et soulève de nombreux fardeaux de mes épaules.

    En toute sincérité, j'ai l'impression que je n'ai fait qu'effleurer la surface avec ce que je peux automatiser avec des tâches cron. Ils sont vraiment les meilleurs amis des développeurs. Si vous utilisez quelqu'un comme CPanel pour gérer votre serveur, il fournit une interface beaucoup plus conviviale pour créer des crons. Complet avec des menus déroulants pour les minutes, les heures, les jours, les mois, etc. qui construisent la ligne cron pour vous.

  5. 7

    Je vois vraiment que c'est quelque chose que tous les spécialistes du marketing devraient utiliser… Y a-t-il quelqu'un qui peut fournir ce service parce que cela semble un peu trop «technique»?

Que pensez-vous?

Ce site utilise Akismet pour réduire les spams. Découvrez comment sont traitées les données de vos commentaires..