web-dev-qa-db-fra.com

Execute PHP script dans le travail cron

Dans notre serveur centos6. Je voudrais exécuter un script php dans le travail cron en tant qu'utilisateur Apache, mais malheureusement, cela ne fonctionne pas.

voici l'édition de crontab (crontab -uapache -e)

24 17 * * * php /opt/test.php

et voici le code source du fichier "test.php" qui fonctionne bien avec "Apache" en tant que propriétaire.

<?php exec( 'touch /opt/test/test.txt');?>

J'essaie de remplacer php par le chemin complet de php (/ usr/local/php/bin/php) mais cela ne fonctionne pas

Merci d'avance, aidez-moi s'il vous plaît

27
Khalilos

tâches automatisées: Cron

Cron est un service de planification basé sur le temps dans les systèmes d'exploitation informatiques de type Linux/Unix. Les tâches cron sont utilisées pour planifier l'exécution périodique de commandes. Vous pouvez configurer des commandes ou des scripts, qui seront exécutés de manière répétée à une heure donnée. Cron est l'un des outils les plus utiles sous Linux ou UNIX, comme les systèmes d'exploitation. Le service cron (démon) s’exécute en arrière-plan et vérifie en permanence le fichier /etc/crontab , /etc/cron. /* répertoires. Il vérifie également le répertoire /var/spool/cron/.

Configuration des tâches périodiques

Dans l'exemple suivant, la commande crontab ci-dessous active automatiquement les tâches cron toutes les dix minutes:

*/10 * * * * /usr/bin/php /opt/test.php

Dans l'exemple ci-dessus, */10 * * * * indique quand la tâche doit avoir lieu. Le premier chiffre représente minutes - dans ce cas, toutes les "dix" minutes. Les autres chiffres représentent respectivement heure , jour , mois et jour de la semaine .

* est un caractère générique, qui signifie "à chaque fois" .

Commencez par rechercher votre [~ # ~] php [~ # ~] en tapant en ligne de commande:

whereis php

La sortie devrait être quelque chose comme:

php:/usr/bin/php /etc/php.ini /etc/php.d/usr/lib64/php/usr/include/php/usr/share/php /usr/share/man/man1/php.1 .gz

Spécifiez correctement le chemin complet dans votre commande.

Tapez la commande suivante pour entrer dans cronjob:

crontab -e

Pour voir ce que vous avez dans crontab .

EDIT 1:

Pour quitter l'éditeur vim sans enregistrer, cliquez simplement sur:

Shift+:

Et puis tapez q!

71
Ilia Rostovtsev

J'ai eu le même problème ... Je devais l'exécuter en tant qu'utilisateur.

00 * * * * root /usr/bin/php /var/virtual/hostname.nz/public_html/cronjob.php
11
Philip

Vous devrez peut-être exécuter le travail cron en tant qu'utilisateur disposant des autorisations nécessaires pour exécuter le script PHP. Essayez d'exécuter le travail cron en tant que root, à l'aide de la commande runuser (man runuser). Ou créez un système crontable et exécutez le script PHP en tant qu'utilisateur autorisé, comme décrit par @Philip.

Je fournis une réponse détaillée sur l'utilisation de cron dans cet article stackoverflow.

Comment écrire un cron qui exécutera un script tous les jours à minuit?

1
Russell E Glaue