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