GNU/Linux >> Tutoriels Linux >  >> Linux

Cron Job pour vérifier si le script Php est en cours d'exécution, sinon, exécutez-le ?

Je me demande si quelqu'un pourrait me diriger dans la bonne direction. J'ai peu d'expérience de travail avec la ligne de commande Linux et récemment, en raison de divers facteurs de travail, j'ai dû acquérir des connaissances.

En gros j'ai deux php scripts qui résident dans un répertoire sur mon serveur. Pour les besoins de l'application, ces scripts doivent être exécutés en continu. Actuellement, j'implémente cela de cette façon :

nohup sh -c 'while true; do php get_tweets.php; done' >/dev/null &

et

nohup sh -c 'while true; do php parse_tweets.php; done' >/dev/null &

Cependant, j'ai remarqué que malgré la boucle infinie les scripts s'arrêtent périodiquement et je suis obligé de les redémarrer. Je ne sais pas pourquoi mais ils le font. Cela m'a fait envisager la perspective d'un CRON travail qui vérifie s'ils sont en cours d'exécution et s'ils ne le sont pas, les exécutent/les redémarrent.

Quelqu'un serait-il en mesure de me fournir des informations sur la marche à suivre ?

Réponse acceptée :

J'aimerais développer la réponse de Davidann puisque vous êtes nouveau dans le concept d'un travail cron. Chaque système UNIX ou Linux a une crontab stockée quelque part. Le crontab est un fichier texte brut. Considérez ce qui suit :(Tiré du wiki Gentoo sur Cron)

#Mins  Hours  Days   Months  Day of the week
10     3      1      1       *       /bin/echo "I don't really like cron"
30     16     *      1,2     *       /bin/echo "I like cron a little"
*      *      *      1-12/2  *       /bin/echo "I really like cron"

Cette crontab doit faire écho à "J'aime vraiment cron" chaque minute de chaque
heure de chaque jour tous les deux mois. Évidemment, vous ne feriez cela que si vous aimiez vraiment cron. La crontab fera également écho à "J'aime un peu cron" à 16h30 tous les jours en janvier et février. Il fera également écho
"Je n'aime pas vraiment cron" à 3h10 le 1er janvier.

Étant nouveau sur cron, vous voudrez probablement commenter les colonnes étoilées afin de savoir à quoi sert chaque colonne. Chaque implémentation de Cron que je connais a toujours été cet ordre. Fusionnant maintenant la réponse de Davidann avec mon fichier commenté :

#Mins  Hours  Days   Months  Day of week
  *     *      *      *       *   lockfile -r 0 /tmp/the.lock && php parse_tweets.php; rm -f /tmp/the.lock

* * * * * lockfile -r 0 /tmp/the.lock &&php get_tweets.php; rm -f /tmp/the.lock

Ne mettre aucune valeur dans chaque colonne par défaut :
Chaque minute de chaque heure de chaque jour de chaque mois toute la semaine, –> chaque minute toute l'année.

Connexe :Linux – Un exécutable Linux compilé sur une « saveur » de Linux fonctionnera-t-il sur une autre ?

Comme l'indique Davidann, l'utilisation d'un fichier de verrouillage garantit qu'une seule copie de l'interpréteur php s'exécute, php parse_tweets.php est la commande pour "exécuter" le fichier, et le dernier bit de la ligne supprimera le fichier de verrouillage pour se préparer à la prochaine exécution. Je n'aime pas supprimer un fichier toutes les minutes, mais si c'est le comportement dont vous avez besoin, c'est très acceptable. L'écriture et la réécriture sur disque ne sont que des préférences personnelles


Linux
  1. Exécutez la tâche cron uniquement si elle n'est pas déjà en cours d'exécution

  2. Comment mettre en place une tâche cron pour lancer un exécutable toutes les heures ?

  3. Exécuter un script shell en parallèle

  4. CronJob ne fonctionne pas

  5. Comment configurer le travail CRON pour qu'il s'exécute toutes les 10 secondes sous Linux ?

Comment exécuter un script Python en PHP

Comment configurer le travail cron pour exécuter un script PHP dans cPanel ?

Comment puis-je exécuter une tâche cron toutes les 30 minutes ?

Comment configurer la tâche cron pour qu'elle s'exécute tous les 2 jours à 23h

N'exécutez pas la tâche cron si elle est déjà en cours d'exécution

Comment exécuter une tâche cron à une heure précise chaque jour ?